1

大きな xml ファイルがあり、xpath を解析して値を挿入しています。これは、いくつかの値を挿入する xml ファイルの一部です。

<SERVICES>
    <RELATIONSHIPS>
         <RELATIONSHIP xlink:from="fromValue01" xlink:to="toValue01" />
         <RELATIONSHIP xlink:from="fromValue02" xlink:to="toValue02" />
         <RELATIONSHIP xlink:from="fromValue03" xlink:to="toValue03" />
         <RELATIONSHIP xlink:from="fromValue04" xlink:to="toValue04" />
         <RELATIONSHIP xlink:from="fromValue05" xlink:to="toValue05" />
         <RELATIONSHIP xlink:from="fromValue06" xlink:to="toValue06" />
         <RELATIONSHIP xlink:from="fromValue07" xlink:to="toValue07" />
    </RELATIONSHIPS>
<SERVICES>

RELATIONSHIPここで、属性は同じで値が異なるこれらのノードをさらに追加したい場合 (例: <RELATIONSHIP xlink:from="fromValue08" xlink:to="toValue08" />)、常にDuplicate Attributeエラーが発生します。これは、解析している xpath の例です。

/SERVICES/RELATIONSHIPS/RELATIONSHIP[@xlink:from="fromValue08" and @xlink:to="toValue08"]

パーサーは、ここに貼り付けるには大きすぎるコードです。すべてのノードを正常に挿入しているので、問題なく動作していると確信しています。ここのこの部分だけが問題を引き起こしています。また、Altova で xpath を確認したところ、動作しました。

私の質問は次のとおりです。同じ属性を持つが異なる値を持つノードを追加することは XML で許可されていますか? はいの場合、Visual Studio が常にこのエラーをスローするのはなぜですか?

4

2 に答える 2

1

分かってきたようです。パーサーの問題は、xpath の問題ほどではありませんでした。xpath にインデックスがありませんでした。したがって、私のパーサーは最初のRELATIONSHIPものを選択していましたが、実際には XAttributes が重複していました。属性条件の前にインデックスを追加しました。したがって、最終的には次のようになりました。

/SERVICES/RELATIONSHIPS/RELATIONSHIP[8][@xlink:from="fromValue08" and @xlink:to="toValue08"]

これが正しい xpath 構文であるかどうかはわかりません。インデックスが条件の後に来る必要がある場合でも、私のパーサーでは機能しています。

于 2012-10-18T13:13:47.150 に答える
0

XPathリクエストに関連して、インデックスが欠落している可能性がありますRELATIONSHIPS

于 2012-10-18T12:40:05.920 に答える