首页 文章

具有多个数组的XPath查询

提问于
浏览
1

我有以下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 回答

  • 1

    如果保持 <parentId><key> 的顺序,即 <parent> 出现在每个 <arrayTypeX><key> 之前,那么这将起作用:

    //key[text()="value"]/preceding-sibling::parentId[1]
    

    例如:
    对于 key = "jkl" ,返回将是 2 .

    但是,必须在此提及,如果需要,可以调整它以便 multiple matches for <key> 以及 no particular order for <parent> and <key> .

相关问题