C# 如何读取忽略标题的xml字符串?

C# 如何读取忽略标题的xml字符串?,c#,xml,xmldocument,xmlreader,C#,Xml,Xmldocument,Xmlreader,我想读取一个xml字符串,忽略标题和注释 忽略这些评论很简单,我找到了一个解决方案。 但是我没有找到任何忽略标题的解决方案 让我举一个例子: 考虑以下xml: 我在XmlReaderSettings上找不到任何可以做到这一点的东西 我是否需要逐个节点只选择我想要的节点?此设置不存在 编辑1: 只是为了继续我的问题。我需要在Web服务的CDATA中使用xml的内容。当我发送注释或xml版本时,我得到的是该部分xml的一个特定错误。因此,我假设当我在没有版本、标题和注释的情况下阅读xml时,我会很

我想读取一个xml字符串,忽略标题和注释

忽略这些评论很简单,我找到了一个解决方案。 但是我没有找到任何忽略标题的解决方案

让我举一个例子:

考虑以下xml:

我在XmlReaderSettings上找不到任何可以做到这一点的东西

我是否需要逐个节点只选择我想要的节点?此设置不存在

编辑1:
只是为了继续我的问题。我需要在Web服务的CDATA中使用xml的内容。当我发送注释或xml版本时,我得到的是该部分xml的一个特定错误。因此,我假设当我在没有版本、标题和注释的情况下阅读xml时,我会很乐意去读。

如果您只想获取标记元素,那么您应该像平常一样阅读xml,然后使用XmlDocument的XPath功能查找它们

对于xmlDoc对象:

var nodes = xmlDoc.DocumentElement.SelectNodes("Tag");
然后,您可以像这样迭代:

foreach (XmlNode node in nodes) { }
或者,很明显,如果永远不打算重用nodes对象,可以将SelectNodes查询放入foreach循环

这将返回XML文档中的所有标记元素,您可以使用它们执行任何您认为合适的操作

如果您不想的话,在使用XmlDocument时不需要遇到注释,并且最终也不会得到包含标题或注释的结果。在开始解析XML之前,是否有特定的原因试图删除XML片段

编辑:根据您的编辑,似乎您在试图传递标题时遇到了标题出错的问题。您可能不应该直接删除标题,因此您最好的选择可能是将标题更改为您知道有效的标题。您可以更改标题(声明),如下所示:


嗯,似乎并没有忽略声明的设置,所以我不得不自己忽略它

以下是我为可能感兴趣的人编写的代码:

private string\u GetXmlWithoutHeadersAndComments(XmlDocument doc)
{
字符串xml=null;
//通过子节点循环并考虑所有注释和声明
if(doc.HasChildNodes)
{
StringBuilder=新的StringBuilder();
foreach(doc.ChildNodes中的XmlNode节点)
if(node.NodeType!=XmlNodeType.XmlDeclaration&&node.NodeType!=XmlNodeType.Comment)
Append(node.OuterXml);
xml=builder.ToString();
}
返回xml;
}

这里有一个非常简单的解决方案

using (var reader = XmlReader.Create(/*reader, stream, etc.*/)
{
    reader.MoveToContent();
    string content = reader.ReadOuterXml();
}

非常奇怪的问题-感觉像。。。你真正的问题是什么?可能如果编码错误,您可以使用从字符串读取XML…
XmlReader
不应将标头作为节点返回。如果在节点中进行迭代,则不应看到标题。@Mihai:我需要等待2天才能选择我自己的awnser.:)我不知道可能存在哪些标签。我知道我可以在所有节点后循环,只使用元素。但这应该是一种更简单的方法,就像我展示的XmlReaderSettings一样。@IúridosAnjos一种更简单的方法做什么?即使有你的编辑,我也不是100%确定我理解。我希望一些设置已经存在。就像XmlReaderSettings中的“IgnoreComment”。@IúridosAnjos查看我刚才发布的内容-我认为它不允许您删除标题,您也不应该这样做,但您至少可以根据自己的需要修改它。谢谢!我刚刚接受我的awnser作为它通过主节点的循环,忽略注释和声明。这对于我的问题来说更一般。
foreach (XmlNode node in nodes) { }
XmlDeclaration xmlDeclaration;
xmlDeclaration = yourDocument.CreateXmlDeclaration(
                                  yourVersion, 
                                  yourEncoding, 
                                  isStandalone);
yourDocument.ReplaceChild(xmlDeclaration, doc.FirstChild);
using (var reader = XmlReader.Create(/*reader, stream, etc.*/)
{
    reader.MoveToContent();
    string content = reader.ReadOuterXml();
}