XPathを使用して読み取るのと同じ方法でXMLを記述する方法はありますか?

VKP

私は以下のような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]

編集
0

コメントを追加

0

関連記事

分類Dev

fcntl()を使用して読み取りごとの最小文字数を設定する方法はありますか?

分類Dev

C#に同じ行の整数と文字列を読み取らせる方法はありますか?

分類Dev

これと同じコードを1行で記述する方法はありますが、Java 8で何らかのタイプの可変マップを使用していますか?

分類Dev

BMPを使用してHARログを読み取る方法はありますか

分類Dev

stdinファイル記述子を閉じる別の方法はありますか(現在、shell = Trueで<&-を使用しています)?

分類Dev

discord.pyを使用して、埋め込みを読み取り、埋め込みの一部を変数として保存する方法はありますか?

分類Dev

Hiveで、explode(XPATH(..))関数を使用してXML内に存在するNULL /空のタグを読み取る方法は?

分類Dev

sublimetextで折り畳み記号を読み取り専用に設定する方法はありますか?

分類Dev

pytesseract OCRを使用してオーブンでデジタル番号を読み取る方法はありますか?

分類Dev

Files APIを使用して.txtファイルを読み書きすることは、BufferredWriterを使用することと同じではありませんか?

分類Dev

XMLの読み取りにデータセットを使用する以外の方法はありますか

分類Dev

Pythonを使用してopenを使用してファイルを逆に読み取る方法はありますか?

分類Dev

ライブラリpugixmlで別のxmlを含むxmlを読み取る方法はありますか?

分類Dev

PHPで文字型を読み取る方法はありますか?

分類Dev

bashスクリプトでファイル記述子3から「読み取り」を使用して読み取る方法は?

分類Dev

bashスクリプトでファイル記述子3から「読み取り」を使用して読み取る方法は?

分類Dev

dapperでのみUNCOMMITTED行を読み取る方法はありますか?

分類Dev

C#でLINQを使用して2つの値を同じIEnumerableに選択する方法はありますか?

分類Dev

Pythonを使用して同じ列名で列の値を追加する方法はありますか?

分類Dev

LinkedHashMapにデータを取り込むためにJava8を使用して記述するより良い方法はありますか?

分類Dev

LinkedHashMapにデータを取り込むためにJava8を使用して記述するより良い方法はありますか?

分類Dev

Perlを使用して、LinuxまたはSolaris環境で他のプロセスの環境変数を読み取る方法はありますか?

分類Dev

Perlを使用して、LinuxまたはSolaris環境で他のプロセスの環境変数を読み取る方法はありますか?

分類Dev

パンダとbeautifulsoupを使用して値と一緒にテーブルセル内のリンクを読み取る方法はありますか?

分類Dev

AdoJobStoreを使用しているときにXmlの読み取りを許可する必要があります

分類Dev

シート内の同様のデータを自動的に結合し、Tableauを接続してデータを読み取る方法はありますか?

分類Dev

JavaでXPathを使用してXMLを読み取る方法

分類Dev

同じ$ projectで$ filterと$ sumを使用する方法はありますか?

分類Dev

Mockito.when(...)を記述して、メソッドのすべてのオーバーロードをカバーする方法はありますか?つまり、同じメソッド名を共有する呼び出しに対して同じものを返しますか?

Related 関連記事

  1. 1

    fcntl()を使用して読み取りごとの最小文字数を設定する方法はありますか?

  2. 2

    C#に同じ行の整数と文字列を読み取らせる方法はありますか?

  3. 3

    これと同じコードを1行で記述する方法はありますが、Java 8で何らかのタイプの可変マップを使用していますか?

  4. 4

    BMPを使用してHARログを読み取る方法はありますか

  5. 5

    stdinファイル記述子を閉じる別の方法はありますか(現在、shell = Trueで<&-を使用しています)?

  6. 6

    discord.pyを使用して、埋め込みを読み取り、埋め込みの一部を変数として保存する方法はありますか?

  7. 7

    Hiveで、explode(XPATH(..))関数を使用してXML内に存在するNULL /空のタグを読み取る方法は?

  8. 8

    sublimetextで折り畳み記号を読み取り専用に設定する方法はありますか?

  9. 9

    pytesseract OCRを使用してオーブンでデジタル番号を読み取る方法はありますか?

  10. 10

    Files APIを使用して.txtファイルを読み書きすることは、BufferredWriterを使用することと同じではありませんか?

  11. 11

    XMLの読み取りにデータセットを使用する以外の方法はありますか

  12. 12

    Pythonを使用してopenを使用してファイルを逆に読み取る方法はありますか?

  13. 13

    ライブラリpugixmlで別のxmlを含むxmlを読み取る方法はありますか?

  14. 14

    PHPで文字型を読み取る方法はありますか?

  15. 15

    bashスクリプトでファイル記述子3から「読み取り」を使用して読み取る方法は?

  16. 16

    bashスクリプトでファイル記述子3から「読み取り」を使用して読み取る方法は?

  17. 17

    dapperでのみUNCOMMITTED行を読み取る方法はありますか?

  18. 18

    C#でLINQを使用して2つの値を同じIEnumerableに選択する方法はありますか?

  19. 19

    Pythonを使用して同じ列名で列の値を追加する方法はありますか?

  20. 20

    LinkedHashMapにデータを取り込むためにJava8を使用して記述するより良い方法はありますか?

  21. 21

    LinkedHashMapにデータを取り込むためにJava8を使用して記述するより良い方法はありますか?

  22. 22

    Perlを使用して、LinuxまたはSolaris環境で他のプロセスの環境変数を読み取る方法はありますか?

  23. 23

    Perlを使用して、LinuxまたはSolaris環境で他のプロセスの環境変数を読み取る方法はありますか?

  24. 24

    パンダとbeautifulsoupを使用して値と一緒にテーブルセル内のリンクを読み取る方法はありますか?

  25. 25

    AdoJobStoreを使用しているときにXmlの読み取りを許可する必要があります

  26. 26

    シート内の同様のデータを自動的に結合し、Tableauを接続してデータを読み取る方法はありますか?

  27. 27

    JavaでXPathを使用してXMLを読み取る方法

  28. 28

    同じ$ projectで$ filterと$ sumを使用する方法はありますか?

  29. 29

    Mockito.when(...)を記述して、メソッドのすべてのオーバーロードをカバーする方法はありますか?つまり、同じメソッド名を共有する呼び出しに対して同じものを返しますか?

ホットタグ

アーカイブ