1

プログラムで XML ドキュメントをナビゲートすることはできません。最後に説明する理由により、1 行の XPath ソリューションが必要です。

以下のような XML スキーマを使用しています。(これは私がそのまま使用しなければならないものです。)

<Root>
  <!-- Child 1 -->
  <Child>
      <Name>Joe</Name>
      <Age>12</Age>
  </Child>
  <!-- Child 2 -->
  <Child>
      <Name>Mike</Name>
      <Age>25</Age>
  </Child>
   <!-- Child 3 --> 
  <Child>
      <Name>Jane</Name>
      <Age>20</Age>
  </Child>
</Root>

すでに "Joe" ノード (つまり、Child 1 内の Name 要素) にいると仮定すると、次のようにそのノードを "ラップ" する XPath クエリを定義する必要があります。

<Root>
  <!-- Child 1 -->
  <Child>
      <Name>Joe</Name>
      <Age>12</Age>
  </Child>
</Root>

先祖、文字列結合、連結などのさまざまな組み合わせを試しましたが、要素を正しく「ラップ」する解決策が見つからないようです。(祖先を使用していた方法は、たとえば、すべての子ノードを返すことでした。これは必要なものではありません。)

その他の考慮事項:

  1. 可能であれば、解決策は 1 行の XPath クエリでなければなりません (理由は後述します)。
  2. どの子要素でも機能するように十分に汎用的である必要があります (つまり、たとえば、私が常に 1 番目、2 番目、3 番目の子であると想定することはできません)。
  3. 上記の例から、実際には実際のルート ノード自体は必要なく、そのタグだけが必要であることがわかります (つまり、その下にすべての子ノードは必要ありません)。ただし、実際の子ノードが必要です (名前と年齢を取得するため)。

注: 実際には、XML をプログラムでナビゲートすることはできません。構成ファイル内の 1 行の XPath クエリに関してすべてを定義する必要があるライブラリ (コードを変更できない) を使用しています。基本的にすべての Name 要素をナビゲートするため、私のソリューションはその時点から機能する必要があります。

4

1 に答える 1

1

XPath はクエリ言語です。

これは、とりわけ、XPath 式の評価によって XML ドキュメントが変更されないことを意味します。

したがって、答えは次のとおりです。XML ドキュメントの変更や新しいドキュメントの作成は、 XPathだけを使用して行うことはできません。

このような変換は、XSLT で指定するのが非常に簡単で自然です。

于 2011-02-08T23:50:46.383 に答える