C# 我们如何处理不知道前缀/名称空间的问题?

C# 我们如何处理不知道前缀/名称空间的问题?,c#,.net,xml,xpath,xsd,C#,.net,Xml,Xpath,Xsd,如何针对没有前缀/命名空间的XmlDocument迭代特定xpath 我正在解析XML,如下所示: var doc = new XmlDocument(); doc.LoadXml(input); var nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace(nsPrefix, ns); var nodes = doc.SelectNod

如何针对没有前缀/命名空间的
XmlDocument
迭代特定xpath

我正在解析XML,如下所示:

        var doc = new XmlDocument();
        doc.LoadXml(input);
        var nsmgr = new XmlNamespaceManager(doc.NameTable);
        nsmgr.AddNamespace(nsPrefix, ns);
        var nodes = doc.SelectNodes(xpath, nsmgr);
nsPrefix
以及
ns
被传入且为非空时,此功能完全正常

但是,当名称空间/前缀为空时,例如在本场景中:

然后我无法正确解析XML

全部功能是:

public static class XPathWalker
    {
        public static IEnumerable<string> GetListOfAttachments(string input, string xpath, string nsPrefix, string ns)
        {
            var doc = new XmlDocument();
            doc.LoadXml(input);
            var nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace(nsPrefix, ns);
            var nodes = doc.SelectNodes(xpath, nsmgr);
            foreach (XmlNode node in nodes)
            {
                if (string.IsNullOrWhiteSpace(node.InnerText))
                {
                    continue;
                }
                yield return node.InnerText;
            }
        }
    }
公共静态类XPathWalker
{
公共静态IEnumerable GetListOfAttachments(字符串输入、字符串xpath、字符串nsPrefix、字符串ns)
{
var doc=新的XmlDocument();
doc.LoadXml(输入);
var nsmgr=新的XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace(nsPrefix,ns);
var nodes=doc.SelectNodes(xpath、nsmgr);
foreach(节点中的XmlNode节点)
{
if(string.IsNullOrWhiteSpace(node.InnerText))
{
继续;
}
产生返回节点.InnerText;
}
}
}

如何针对没有前缀/名称空间的
XmlDocument
迭代特定的xpath?

确实有一种方法可以使用
XmlDocument
实现这一点。首先,我必须将输入的
字符串
转换为

// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(input);
MemoryStream stream = new MemoryStream(byteArray); 
一旦我有了
,我就能够将它输入
XmlDocument
。以下是完整的代码:

        string input = @"<?xml version="1.0" encoding="UTF-8"?>etc..";
        byte[] byteArray = Encoding.UTF8.GetBytes(input);
        var stream = new MemoryStream(byteArray);
        var doc = new XmlDocument();
        var nodes = doc.SelectNodes(xpath);
        using (var tr = new XmlTextReader(stream))
        {
            tr.Namespaces = false;
            doc.Load(tr);
        }
string input=@“etc…”;
byte[]byteArray=Encoding.UTF8.GetBytes(输入);
var流=新的内存流(byteArray);
var doc=新的XmlDocument();
var nodes=doc.SelectNodes(xpath);
使用(var tr=新的XmlTextReader(流))
{
tr.namespace=false;
文件加载(tr);
}

如果您根本不关心名称空间,而是想使用
System.Xml.Linq
您可以@Crowcoder谢谢!但这意味着我会重新实施。有bandaid解决方案吗?@BrootsWaymb“可能”不付账单,你是说用xmldocument不可能忽略名称空间吗?我真的不知道,我已经很久没有使用
xmldocument