2
 <?xml version='1.0' encoding='utf-8' standalone='yes'?>
    <stock-items>
      <stock-item>
        <name>Loader 34</name>
        <sku>45GH6</sku>
        <vendor>HITINANY</vendor>
        <useage>Lifter 45 models B to C</useage>
        <typeid>01</typeid>
        <version>01</version>
        <reference>33</reference>
        <comments>EOL item. No Re-order</comments>
        <traits>
          <header>56765</header>
          <site>H4</site>
          <site>A6</site>
          <site>V1</site>
        </traits>  
        <type-validators>
          <actions>
            <endurance-tester>bake/shake</endurance-tester>
          </actions>
          <rules>
            <results-file>Test-Results.txt</results-file>
            <file-must-contain file-name="Test-Results.xml">
              <search>
                <term>[<![CDATA[<"TEST TYPES 23 & 49 PASSED"/>]]></term>
                <search-type>exactMatch</search-type>
              </search>
            </file-must-contain>
          </rules>
        </type-validators>
      </stock-item>
    </stock-items>

上記のxmlから文字列にルールフラグメントを取得して、データベースに追加できるようにしようとしています。現在、検索要素とその内容は2回追加されています。私はこれがなぜ起こっているのか知っていますが、それを防ぐ方法を理解することはできません。

これが私のコードです

    var Rules = from rules in Type.Descendants("rules")
                                       select rules.Descendants(); 

              StringBuilder RulesString = new StringBuilder();

              foreach (var rule in Rules)
                    {   
                      foreach (var item in rule)
                      {      
                              RulesString.AppendLine(item.ToString());
                      }
                    }

 Console.WriteLine(RulesString);

最後に、ルール内の要素はオプションであり、これらの要素の一部には、最大4または5レベルの深さの他の子要素が含まれる場合と含まれない場合があります。TIA

更新: 私が達成しようとしていることをより明確にしようとすること。

上記のxmlから、次のように、rules要素にすべてを含む文字列を作成する必要があります

<results-file>Test-Results.txt</results-file>
                <file-must-contain file-name="Test-Results.xml">
                  <search>
                    <term>[<![CDATA[<"TEST TYPES 23 & 49 PASSED"/>]]></term>
                    <search-type>exactMatch</search-type>
                  </search>
                </file-must-contain>
4

2 に答える 2

3

目的は、ルール要素に数レベルの深さの子要素が含まれる場合と含まれない場合があることを考慮しながら、ルール要素のコンテンツ全体をそのまま抽出することです。

要素全体をrules文字列として(その内容をxmlとして気にするのではなく)必要な場合は、その内容を掘り下げる必要はありません。要素をとして取得してから、ToString()を呼び出すXNode必要があります。それ

次の例では、このメソッドを使用してインデントされたXMLを取得します。

XElement xmlTree = new XElement("Root",
    new XElement("Child1", 1)
);
Console.WriteLine(xmlTree);

この例では、次の出力が生成されます。

<Root>
  <Child1>1</Child1>
</Root>
于 2012-05-18T12:02:48.840 に答える
0

重複を防ぎたい場合は、xmlを解析した後、文字列を作成する前にDistinct()またはGroupBy()を使用する必要があります。

私はまだ出力がどうあるべきかを完全に理解していないので、重複を見つけるという観点から、正確に何を使用するか、またはどのように使用するかについて明確な解決策を提供することはできません。あなたが元の投稿を洗練することができればそれは助けになるでしょう。

  1. シナリオに表示されるxmlの構造が必要です。ネスティングとすべて。
  2. 最終的な文字列の例が必要です。それをデータベースに保存することは、この投稿では実際には重要ではないので、仮にあったとしても、一度だけ簡単に言及する必要があります。
于 2012-05-18T12:12:01.563 に答える