<?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中的规则片段转换为字符串,以便将其添加到数据库中。目前,搜索元素及其内容会添加两次。我知道为什么会这样,但是无法弄清楚如何防止它。
继承我的代码
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元素中找到一个包含 everthing 的字符串,完全就像这样:
<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>
答案 0 :(得分:3)
目标是按原样提取rules元素的全部内容,同时考虑到rules元素可能包含或不包含多个级别的子元素
如果您只想将整个rules
元素作为字符串(而不是将其内容视为xml),则无需深入了解其内容,只需将元素作为字符串即可XNode
然后call ToString() on it:
以下示例使用此方法检索缩进的XML。
XElement xmlTree = new XElement("Root", new XElement("Child1", 1) ); Console.WriteLine(xmlTree);
此示例生成以下输出:
<Root> <Child1>1</Child1> </Root>
答案 1 :(得分:0)
如果你想要防止重复,那么在解析xml之后和构建字符串之前需要使用Distinct()或GroupBy()。
我仍然没有完全理解输出应该是什么,所以我无法提供一个明确的解决方案,确定在确定重复的方面使用什么或如何使用。如果你可以改进那些有用的原帖。