此刻我的脚趾浸入一点 Java 中,并有一个关于 XPath 的问题。
我有一个很大的 Xml,我想使用 XPath 来获取一个特定的节点,然后针对这小块 Xml 触发进一步的 XPath 调用。
这是我的 Xml 的粗略轮廓:
<Page>
<ComponentPresentations>
<ComponentPresentation>
<Component>
<Title>
<ComponentTemplate>
<ComponentPresentation>
<Component>
<Title>
<ComponentTemplate>
我的第一个 XPath<Component>
根据<ComponenTemplate>
Id 值的值选择节点:
String componentExpFormat = "/Page/ComponentPresentations/ComponentPresentation/ComponentTemplate/Id[text()='%1$s']/ancestor::ComponentPresentation";
String componentExp = String.format(componentExpFormat, template);
XPathExpression expComponent = xPath.compile(componentExp);
Node componentXml = (Node) expComponent.evaluate(xmldoc, XPathConstants.NODE);
这给了我<Component>
我想要的,但我不能;然后似乎无法针对节点进行 XPath:
String componentExpTitle = "/Component/Fields/item/value/Field/Name[text()='title']/parent::node()/Values/string";
XPathExpression expTitle = xPath.compile(componentExpTitle);
String eventName = expTitle.evaluate(componentXml, XPathConstants.STRING).toString();
如果没有这个,我每次都必须包含完整的 XPath:
/Page/ComponentPresentations/ComponentPresentation/ComponentTemplate/Id[text()='%1$s']/ancestor::ComponentPresentation/Component/Fields/item/value/Field/Name[text()='title']/parent::node()/Values/string
这是唯一的方法吗?
干杯