以下はXMLです
<?xml version="1.0" encoding="UTF-8"?>
<library>
<object>book</object>
<bookname>
<value>testbook</value>
<author>
<value>ABCD</value>
<category>
<value>story</value>
<price>
<dollars>200</dollars>
</price>
</category>
</author>
<author>
<value>EFGH</value>
<category>
<value>fiction</value>
<price>
<dollars>300</dollars>
</price>
</category>
</author>
</bookname>
</library>
以下の出力を取得するには、xpath式が必要です
<?xml version="1.0" encoding="UTF-8"?>
<library>
<object>book</object>
<bookname>
<value>testbook</value>
<author>
<value>ABCD</value>
<category>
<value>story</value>
<price>
<dollars>200</dollars>
</price>
</category>
</author>
</bookname>
</library>
しかし、以下のxpath式を適用すると、入力xml全体が変換された出力として取得されます。代わりに、author / value ='ABCD'に一致する親ノード+子ノードのみが必要です(上記のように)
<xsl:copy-of select="/library/object[text()='book']/../bookname/value[text()='testbook']/../author/value[text()='ABCD']/../../.."/>
目的の出力を取得するための正しいxpath式を手伝ってください。
Javaプログラムを使用してxpath式を評価し、目的のXML出力を取得しています。したがって、xpath式が必要です。以下は私のJavaコードです
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("books.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("/library/object[text()='book']/../bookname/value[text()='testbook']/../author/value[text()='ABCD']/../../..");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
Javaまたはxsltの正しい解決策を手伝ってください