我们如何处理不知道 prefix/namespace?
how do we deal with not knowing the prefix/namespace?
如何针对没有 prefix/namespace 的 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
并且 非空 .
时,这完全可以正常工作
但是,当 namespace/prefix 为空时,例如在这种情况下:
然后我无法正确解析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;
}
}
}
如何针对没有 prefix/namespace 的 XmlDocument
遍历特定的 xpath?
XmlDocument
确实有办法做到这一点。首先,我必须将输入 string
转换为 stream
:
// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(input);
MemoryStream stream = new MemoryStream(byteArray);
一旦我有了 stream
,我就可以将它输入 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);
}
如何针对没有 prefix/namespace 的 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
并且 非空 .
但是,当 namespace/prefix 为空时,例如在这种情况下:
然后我无法正确解析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;
}
}
}
如何针对没有 prefix/namespace 的 XmlDocument
遍历特定的 xpath?
XmlDocument
确实有办法做到这一点。首先,我必须将输入 string
转换为 stream
:
// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(input);
MemoryStream stream = new MemoryStream(byteArray);
一旦我有了 stream
,我就可以将它输入 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);
}