私は以下のようなXMLを持っており、XPathを使用してXMLを読んでいます。データが配置される正確な場所がわかっているので、パスを式オブジェクトに動的に渡し、値を取得しています。
<MESSAGE xmlns:xlink="http://www.w3.org/1999/xlink">
<ABOUT_VERSIONS>
<ABOUT_VERSION SequenceNumber="1" xlink:label="ASSET_1" >
<CreatedDatetime>2015-08-24T09:30:47Z</CreatedDatetime>
<DataVersionName>Purchase Example</DataVersionName>
</ABOUT_VERSION>
</ABOUT_VERSIONS>
<DEALS>
<DEAL>
<ACCOUNT>
<Name>Test</Name>
</ACCOUNT>
</DEAL>
</DEALS>
</MESSAGE>
XMLを読み取るために以下の種類のコードを使用しています。
XPathFactory xpf = XPathFactory.newInstance();
XPath xPath = xpf.newXPath();
XPathExpression pathExpression =
xPath.compile("MESSAGE/ABOUT_VERSIONS/ABOUT_VERSION");
InputSource inputSource = new InputSource("C:/Sample.xml");
NodeList Nodes = (NodeList)
xPath.evaluate("MESSAGE/ABOUT_VERSIONS/ABOUT_VERSION", inputSource,
XPathConstants.NODESET);
JavaでXMLを書くそのような方法はありますか?後で追加のタグと追加のデータを使用して同じXMLを作成する必要があります。
XPath自体は正規表現と同様にパターンマッチング言語であるため、XPathを直接使用して操作することはできません。ただし、正規表現と同様に、XPathをより大きなテクノロジスタックの一部として使用してドキュメントを変更できるエンジンがあります。
既存のXMLドキュメントを変更しようとしている場合は、それをDOMツリーとして読み取ることを検討する必要があります。その後、XPathを使用して、変更する個々のノードまたはノードのグループを簡単に見つけることができます。DOMモデルを使用してそれらを変更してから、シリアル化してディスクに戻します。
または、XSLTシートを作成して入力を変換することもできます。あなたはこのように見えるアイデンティティ変換から始めることができます...
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
これにより、入力ドキュメントと同じXML出力が生成されます。次に、テンプレートの追加を開始して、目的のXPathに一致する特定のノードを変更できます。私の経験では、これはDOM操作よりもかなり難しい傾向があります。これは、Javaで通常実行するロジックのほとんどが、独自の言語であるXSLTで実行する必要があるためです。ただし、ストリーミングを使用してXSLT変換を実行できるため、メモリに収まりにくい非常に大きなドキュメントで作業している場合は、より簡単な場合があります。
詳細をお伝えしたいと思いますが、正直なところ、6年ほどこれを扱っていないので、構文に少し錆びています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加