2011-08-28 30 views
0

代码:如何保存XML片段?

var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment }; 
     using (var reader = XmlReader.Create(inputz, readerSettings)) 
     { 
      while (reader.Read()) 
      { 
       using (var fragmentReader = reader.ReadSubtree()) 
       { 
        if (fragmentReader.Read()) 
        { 
         var fragment = XNode.ReadFrom(fragmentReader) as XElement; 

什么的输出:

<sys> 
     <id>FSB</id> 
     <label>FSB</label> 
     <value>266</value> 
    </sys> 
    <sys> 
     <id>CPU</id> 
     <label>speed</label> 
     <value>2930</value> 
    </sys> 

我如何改变它,这样它写道:“值”的字符串,而不是?所以输出的样子:,266,2930

感谢

+0

您是否希望将整个XML片段转换为字符串,还是要检索某些节点 - 例如, '价值'?如果你正在使用'sys'节点,最好把它保存为XML,直到你显示/比较值。 –

+0

你显示的代码段实际上并不输出任何内容;它只是读取xml并将其存储在一个变量中。你必须给我们生成输出的线...... – Stobor

+0

我改变了第一篇文章:)再看一遍。 – Csharpz

回答

1

那么答案显然是要转换为字符串 -

var stringFragment = fragment.ToString(); 

,或者如有必要,

var fragment = (XNode.ReadFrom(fragmentReader) as XElement).ToString(); 

我不是100%肯定这会实现你想要做的,但它会将你的XML片段作为一个字符串返回。

编辑

现在,这个问题已经被更新,我可以给一些更多的信息。我假定每个fragment实际上是sys节点。

您首先需要获取value节点,然后检索其“值”(即其内容)。

var valueNode = fragment.Element("value"); 
var content = valueNode.Value; 
+0

感谢您的额外信息,但在MSDN周围窥探我发现如何:reader.ReadToFollowing(“value”); port.Write(reader.ReadElementContentAsString()+“,”);就性能而言,这是最好的方式吗?或者它可能并不重要。 – Csharpz

1

我猜想:

var fragment = (XNode.ReadFrom(fragmentReader)).ToString();