- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
考虑这个简单的 XML 文档。此处显示的序列化 XML 是来自复杂 POCO 对象的 XmlSerializer 的结果,我无法控制其架构。
<My_RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
<id root="2.16.840.1.113883.3.51.1.1.1" extension="someIdentifier" xmlns="urn:hl7-org:v3" />
<creationTime xsi:nil="true" xmlns="urn:hl7-org:v3" />
</My_RootNode>
目标是提取id节点上扩展属性的值。在这种情况下,我们使用 SelectSingleNode 方法,并给出一个 XPath 表达式:
XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/id");
//idNode is evaluated to null at this point in the debugger!
string msgID = idNode.Attributes.GetNamedItem("extension").Value;
问题是 SelectSingleNode
方法为给定的 XPath 表达式返回 null。
问题:关于此 XPath 查询的正确性或为什么此方法调用 + XPath 表达式会返回空值的任何想法?也许 namespace 是问题的一部分?
最佳答案
我强烈怀疑问题与命名空间有关。尝试摆脱命名空间,你会没事的——但显然这对你的真实情况没有帮助,我假设文档是固定的。
我不记得如何在 XPath 表达式中指定 namespace ,但我确信这就是问题所在。
编辑:好的,我现在想起来怎么做了。虽然这不是很令人愉快 - 您需要为其创建一个 XmlNamespaceManager
。以下是一些适用于您的示例文档的示例代码:
using System;
using System.Xml;
public class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
XmlNamespaceManager namespaces = new XmlNamespaceManager(doc.NameTable);
namespaces.AddNamespace("ns", "urn:hl7-org:v3");
doc.Load("test.xml");
XmlNode idNode = doc.SelectSingleNode("/My_RootNode/ns:id", namespaces);
string msgID = idNode.Attributes["extension"].Value;
Console.WriteLine(msgID);
}
}
关于c# - SelectSingleNode 使用 XPath 为已知良好的 xml 节点路径返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089196/
在验证 XML 文件中的 ID 时,它区分大小写。我添加了“翻译”以使其不区分大小写。以下是我的代码: $Config = "xmlfile" [xml]$configxml = Get-Conten
我一直在查看 SO 并发现许多问答可能是同一类型的问题,但我无法正常工作,我做错了什么。 当我提取某个 我试过像这样使用 lower-case() 函数, HtmlNode ctnode = htm
我正在使用 C# (.NET 2.0)——实际上是在尝试使用 MONO 让它在 Mac OS X 上工作(我不认为 MONO 是问题所在) 给定以下 XML 片段,该片段已从更大的 XmlDocume
我正在使用 .Net 2.0,并且需要从我的 XmlDocument 中 SelectSingleNode 而不管命名空间,这听起来可能是错误的。 具体一点 XmlElement slipType =
我在 MSXML 中选择带有命名空间的节点时遇到了问题。 XML 已由 ADODB 记录集生成,如下所示:
我需要获取缺少特定参数的xml节点。假设我有以下c:\ temp \ a.xml: C:\file_myproduct C:\file_general 如何获取没有属性的C:\ file_
这是我用来在Sharepoint列表项的DOM文档中查找某个节点的内部文本的代码: 'parse XML of a list item to get the field value Private F
private const string TECHACCOUNTAMTITEM_AMT_XPATH = @"//Part[translate(@Type, 'ABCDEFGHIJKLMNOPQRSTU
您好,我有在 app.exe.config 文件中创建/更新字段的功能 public static void UpdateConfig(string FieldName, string
我有一个 XML 文件,其中包含两个同名节点,并且需要验证第一个节点是否存在。我正在尝试使用 SelectSingleNode,我发现了一些 XPath 示例。 XML文件
在使 NodeList.SelectSingleNode() 正常工作时遇到问题。我的 XML 如下所示: fileN
感谢阅读我的帖子。我正在尝试从以下 xml 文件加载 FFTExe 的值,但它的节点返回 null。 这是我用来读取xml的代码 const string CMD_FFT = "/Comman
以我的 XML 的这个简化示例为例: Invalid Login 我正在尝试使用 SelectSingleNode 方法选择“错误”节点,但是使用以下代码它总是返回 NULL? XmlNode
我正在解析一个 xml 文档,我需要找出 gid(一个属性)值 (3810)。 基于 SelectSingleNode()。我发现要找到属性名称及其值并不容易。 我可以使用这种方法还是必须切换到另一种
这是我的代码: XmlTextReader reader = new XmlTextReader(xmlPath); XmlDocument xmlDoc = new XmlDocument(); x
我正在尝试解析该字段,但无法正常工作。当前尝试: var name = doc.DocumentNode.SelectSingleNode("//*[@id='my_name']").InnerHtm
我的问题是这样的。假设我有这样的 xml Value1 Value2 Value1 Value2 Value3 我有一个方法获取参数
这个问题是已回答问题的后续问题: XmlDocument.SelectSingleNode and prefix + xmlNamespace issue 问题是将来收到的 xml 的命名空间前缀可能
private void toolStripButton2_Click(object sender, EventArgs e) { XmlTextReader reader = new
我是个新手,但最近我一直在研究解析一些 XML 数据。我实际上在这个网站上发现了一个很好的功能,我可以通过以下方式到达具有特定属性的特定节点: docFoo.SelectSingleNode("foo
我是一名优秀的程序员,十分优秀!