如何让 xPath 表达式满足多个条件
How to have xPath expression for more than one conditions
(已更新)
我有类似下面的东西XML:
<?xml version="1.0" encoding="utf-8"?>
<ChangeTypes>
<ChangeType Type="ItemGLStock">
<ItemMessages>
<ItemMessage Type="MessageType="TypeI">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage Type="MessageType="TypeII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage Type="MessageType="TypeIII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage Type="MessageType="TypeIV">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
</ItemMessages>
</ChangeType>
</ChangeTypes>
现在我想使用 XPath select 一个基于 ChangeType 和 ItemMessage Type 的 MessageContentTermID 和 MessageContent。
可能吗?
您的示例输入 XML 无效 - 我已经进行了调整,例如<ChangeType ="ItemGLStock">
到 <ChangeType Type="ItemGLStock">
和 <ItemMessage Type="MessageType="TypeI">
到 <ItemMessage MessageType="TypeI">
并将打开但关闭但反之亦然的 ItemGLEvaluationMessage
标签更改为 ItemMessage
以下内容调整后的示例输入:
<ChangeTypes>
<ChangeType Type="ItemGLStock">
<ItemGLEvaluationMessages>
<ItemMessage MessageType="TypeI">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage MessageType="TypeII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage MessageType="TypeIII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage MessageType="TypeIV">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
</ItemGLEvaluationMessages>
</ChangeType>
</ChangeTypes>
对于这个例子,下面的 XPath
//Content[parent::ItemMessage[@MessageType="TypeI"] and
ancestor::ChangeType[@Type='ItemGLStock']]
/@MessageContentTermID
根据两个条件选择MessageContentTermID
:
parent::ItemMessage[@MessageType="TypeI"]
and
ancestor::ChangeType[@Type='ItemGLStock']
结果:
MessageContentTermID="0"
对于MessageContent,相应的是:
//Content[parent::ItemMessage[@MessageType="TypeI"] and
ancestor::ChangeType[@Type='ItemGLStock']]
/@MessageContent
结果:
MessageContent="Bla Bla Bla"
如果你只想要值,你可以使用 string()
:
string(//Content[parent::ItemMessage[@MessageType="TypeI"] and
ancestor::ChangeType[@Type='ItemGLStock']]
/@MessageContent)
结果:
Bla Bla Bla
(已更新)
我有类似下面的东西XML:
<?xml version="1.0" encoding="utf-8"?>
<ChangeTypes>
<ChangeType Type="ItemGLStock">
<ItemMessages>
<ItemMessage Type="MessageType="TypeI">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage Type="MessageType="TypeII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage Type="MessageType="TypeIII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage Type="MessageType="TypeIV">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
</ItemMessages>
</ChangeType>
</ChangeTypes>
现在我想使用 XPath select 一个基于 ChangeType 和 ItemMessage Type 的 MessageContentTermID 和 MessageContent。 可能吗?
您的示例输入 XML 无效 - 我已经进行了调整,例如<ChangeType ="ItemGLStock">
到 <ChangeType Type="ItemGLStock">
和 <ItemMessage Type="MessageType="TypeI">
到 <ItemMessage MessageType="TypeI">
并将打开但关闭但反之亦然的 ItemGLEvaluationMessage
标签更改为 ItemMessage
以下内容调整后的示例输入:
<ChangeTypes>
<ChangeType Type="ItemGLStock">
<ItemGLEvaluationMessages>
<ItemMessage MessageType="TypeI">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage MessageType="TypeII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage MessageType="TypeIII">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
<ItemMessage MessageType="TypeIV">
<Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/>
</ItemMessage>
</ItemGLEvaluationMessages>
</ChangeType>
</ChangeTypes>
对于这个例子,下面的 XPath
//Content[parent::ItemMessage[@MessageType="TypeI"] and
ancestor::ChangeType[@Type='ItemGLStock']]
/@MessageContentTermID
根据两个条件选择MessageContentTermID
:
parent::ItemMessage[@MessageType="TypeI"]
and
ancestor::ChangeType[@Type='ItemGLStock']
结果:
MessageContentTermID="0"
对于MessageContent,相应的是:
//Content[parent::ItemMessage[@MessageType="TypeI"] and
ancestor::ChangeType[@Type='ItemGLStock']]
/@MessageContent
结果:
MessageContent="Bla Bla Bla"
如果你只想要值,你可以使用 string()
:
string(//Content[parent::ItemMessage[@MessageType="TypeI"] and
ancestor::ChangeType[@Type='ItemGLStock']]
/@MessageContent)
结果:
Bla Bla Bla