ちょっと Java に足を踏み入れて、XPath について質問があります。
大きな Xml があり、XPath を使用して特定のノードを取得し、この小さな Xml チャンクに対してさらに XPath 呼び出しを実行したいと考えています。
私のXmlの大まかな概要は次のとおりです。
<Page>
<ComponentPresentations>
<ComponentPresentation>
<Component>
<Title>
<ComponentTemplate>
<ComponentPresentation>
<Component>
<Title>
<ComponentTemplate>
私の最初の XPathは、 Id 値<Component>
の値に基づいてノードを選択します。<ComponenTemplate>
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
それが唯一の方法ですか?
乾杯