我有以下XML结构:
<xml>
<header>
(Tags goes here)
</header>
<listItem>
<id></id>
...
(Sort of data)
...
<arrayType1>
<id></id>
<parentId></parentId>
<!-- Key: Data to lookup and get the entire structure (listItem) with XPath-->
<key></key>
</arrayType1>
<arrayType2>
<id></id>
<parentId></parentId>
<!-- Key: Data to lookup and get the entire structure (listItem) with XPath-->
<key></key>
</arrayType2>
</listItem>
<listItem>
(Exactly same structure with different data as above)
</listItem>
</xml>
标签 <parentId>
具有相同的 <listItem><id>
标签数据(不要与每个arrayType的 <id>
混淆) .
我需要一个XPath表达式,它返回 <parentId>
或 <listItem><id>
只有数据(或者,默认情况下,返回整个arrayTypeX并稍后在另一个XSLT转换中处理) .
我需要这个在IBM Integration Designer(Websphere ESB)中的XSLT Map中进行转换,但我对XPath表达式非常困惑,但是,重点仅在于构建XPath Expression .
我试过这个表达式:
/ listItem [arrayType1 [key ='value']] / parentID
但我不知道XPath是否支持这种语法(数组内部寻找特定值的数组) . 该表达式始终返回列表的第一个ID .
每个项目的基数是:
header: [0..1]
listItem: [0..*]
arrayType1: [0..*]
arrayType2: [0..*]
你能解释一下吗?
谢谢
编辑:这是一个例子:
<xml>
<header>
(Tags goes here)
</header>
<listItem>
<id>1</id>
<arrayType1>
<id>1000</id>
<parentId>1</parentId>
<key>abc</key>
</arrayType1>
<arrayType1>
<id>1500</id>
<parentId>1</parentId>
<key>mno</key>
</arrayType1>
<arrayType2>
<id>2000</id>
<parentId>1</parentId>
<key>def</key>
</arrayType2>
</listItem>
<listItem>
<id>2</id>
<arrayType1>
<id>3000</id>
<parentId>2</parentId>
<key>ghi</key>
</arrayType1>
<arrayType2>
<id>4000</id>
<parentId>2</parentId>
<key>jkl</key>
</arrayType2>
</listItem>
</xml>
只有 <key>
(例如,"ghi"),我希望得到带有XPath表达式的 <id>
或 <parentId>
"2" .
1 回答
如果保持
<parentId>
和<key>
的顺序,即<parent>
出现在每个<arrayTypeX>
的<key>
之前,那么这将起作用:例如:
对于
key = "jkl"
,返回将是2
.但是,必须在此提及,如果需要,可以调整它以便 multiple matches for <key> 以及 no particular order for <parent> and <key> .