java xml 节点路径,SelectSingleNode使用XPath为已知良好的xml节点路径返回null

回答(9)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我强烈怀疑问题与名称空间有关 . 尝试摆脱名称空间,你会没事的 - 但显然这对你的实际情况没有帮助,我认为这个文件是固定的 .

我不记得如何在XPath表达式中指定命名空间,但我确信这是问题所在 .

编辑:好的,我've remembered how to do it now. It'虽然不是很令人愉快 - 你需要为它创建一个 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);

}

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果要完全忽略名称空间,可以使用:

static void Main(string[] args)

{

string xml =

"\n" +

" \n" +

" \n" +

"";

XmlDocument doc = new XmlDocument();

doc.LoadXml(xml);

XmlNode idNode = doc.SelectSingleNode("/*[local-name()='My_RootNode']/*[local-name()='id']");

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这应该适用于你的情况而不删除命名空间:

XmlNode idNode = myXmlDoc.GetElementsByTagName("id")[0];

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对不起,您忘记了命名空间 . 你需要:

XmlNamespaceManager ns = new XmlNamespaceManager(myXmlDoc.NameTable);

ns.AddNamespace("hl7","urn:hl7-org:v3");

XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/hl7:id", ns);

事实上,无论是在这里还是在Web服务中,从XPath操作或依赖于XPath的任何东西获取null通常都表明XML命名空间存在问题 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

嗯......我遇到了同样的问题而且很头疼 . 由于我不太关心命名空间或xml架构,我只是从我的xml中删除了这些数据,它解决了我所有的问题 . 可能不是最好的答案?可能,但如果您不想处理所有这些并且您只关心数据(并且不会将xml用于其他任务),删除命名空间可能会解决您的问题 .

XmlDocument vinDoc = new XmlDocument();

string vinInfo = "your xml string";

vinDoc.LoadXml(vinInfo);

vinDoc.InnerXml = vinDoc.InnerXml.Replace("xmlns=\"http://tempuri.org\/\", "");

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只是为了解决命名空间问题,在我的情况下,我一直在运行具有多个命名空间的文档,并且需要正确处理命名空间 . 我编写了下面的函数来获取命名空间管理器来处理文档中的任何命名空间:

private XmlNamespaceManager GetNameSpaceManager(XmlDocument xDoc)

{

XmlNamespaceManager nsm = new XmlNamespaceManager(xDoc.NameTable);

XPathNavigator RootNode = xDoc.CreateNavigator();

RootNode.MoveToFollowing(XPathNodeType.Element);

IDictionary NameSpaces = RootNode.GetNamespacesInScope(XmlNamespaceScope.All);

foreach (KeyValuePair kvp in NameSpaces)

{

nsm.AddNamespace(kvp.Key, kvp.Value);

}

return nsm;

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只需使用// id而不是/ id . 它在我的代码中工作正常

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

要记住的规则是:如果您的文档指定 namespace ,则必须在调用 SelectNodes() 或 SelectSingleNode() 时使用 XmlNamespaceManager . 这是好事 .

请参阅文章Advantages of namespaces . Jon Skeet在他的答案中做得很好,展示了如何使用 XmlNamespaceManager . (这个答案应该只是对答案的评论,但我没有足够的Rep Points来评论 . )

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

Roisgoen的回答对我有用,但为了使它更通用,你可以使用RegEx:

//Substitute "My_RootNode" for whatever your root node is

string strRegex = @"\s+xmlns([\s]|[^>])*)>";

var myMatch = new Regex(strRegex, RegexOptions.None).Match(myXmlDoc.InnerXml);

if (myMatch.Success)

{

var grp = myMatch.Groups["xmlns"];

if (grp.Success)

{

myXmlDoc.InnerXml = myXmlDoc.InnerXml.Replace(grp.Value, "");

}

}

我完全承认这不是一个最佳实践答案,但它是一个简单的解决方案,有时这就是我们所需要的 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php fastcgi exp,nginx +phpfastcgi 环境下 导出excel文件,超时,数据被截断问题,解决...

nginx 错误日志显示,访问超时2015/09/16 07:18:43 [error] 2108#0: *6 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.138.7, server: localhost, request: "GET /test/index.php?mlists.e…

python爬虫软件安装不了_Mac os 下 python爬虫相关的库和软件的安装

由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑。一. 相关软件的安装:1. homebrew:homebrew 是mac os系统下的包管理器由于功能齐…

php中文删除乱码部分,PHP中文乱码解决办法

一. 首先是PHP网页的编码1. php文件本身的编码与网页的编码应匹配a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charsetgb2312"),静态页面添加,所有文件的编码格…

hdfs 多租户_【技术干货】常见的HDFS面试问答精选

最常见的HDFS面试问答1. 什么是HDFS?答:HDFS代表Hadoop分布式文件系统,该系统将大型数据集存储在Hadoop中。它可以在商用硬件上运行,并且具有很高的容错能力。HDFS遵循主/从体系结构,其中许多计算机在集群上运行。群集…

python装饰器常见问题_python 装饰器常见用法

跟踪调用class tracer: # State via instance attributesdef __init__(self, func): # On decoratorself.calls 0 # Save func for later callself.func funcdef __call__(self, *args, **kwargs): # On call to original functionself.calls 1print(call %s to %s % (self…

php通过url传递变量,PHP:如何在模态URL中放置和传递变量

所以,我有一个按钮,可以在同一页面中直接链接到模态.这是按钮和网址href"main_user.php?user_id<?php echo $user[user_id]; ?>#myModal"class"btn btn-warning">(我尝试在#modal之前回显$user_id)是不是&#xff1f;单击按钮后,将出现模态.这…

python 根据类名 查找module_关于 Python 命令中的 m 参数

在命令行中使用 Python 时&#xff0c;它可以接收大约 20 个选项(option)&#xff0c;语法格式如下&#xff1a;python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]本文想要聊聊比较特殊的“-m”选项&#xff1a;关于它的典型用法、原理解析与发…

php xampp bug,PHP网站访问慢的处理方法

如果网站跑在了LAMP环境中&#xff0c;就无法使用php-fpm的slow log了&#xff0c;那如何分析瓶颈点&#xff1f;没关系你还可以使用这个XdebugWebgrind&#xff0c;其中Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具)&#xff0c;可以用来跟踪&#xff0c;调试和分析…

matlab安装程序无法启动jvm_JVM 执行 Java 程序时的内存区域划分

在学习 Java 虚拟机(后面简称&#xff1a; JVM )中的垃圾回收机制(GC)之前&#xff0c;先需要了解 在 JVM 中的 Java 程序(class 文件)加载到内存之后到底是怎么存的。在阅读了 JVM规范 和周志明的 《深入理解Java虚拟机(第2版)》 之后&#xff0c;总结一下JVM中的内存划分以及…

phpFpm加载php,php-fpm添加service服务的例子

nginx通过FastCGI运行PHP比Apache包含PHP环境有明显的优势,最近有消息称,PHP5.4将很有可能把PHP-FPM补丁包含在内核里,nginx服务器平台上运行PHP将更加轻松,下面我们就来看一篇php-fpm平滑启动并配置服务例子。我的php是源码安装的。php-fpm在PHP 5.3.2以后的版本不支持以前的p…

python 性能问题_Python 性能问题一直饱受诟病,这篇我们讨论下提升 Python 应用性能的常见方法。...

Python - 提高Python运行效率的六个窍门Python是一门优秀的语言&#xff0c;它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此&#xff0c;它还轻松支持多任务处理&#xff0c;比如多进程。不喜欢Python的人经常会吐嘈Python运行太慢。但是&#xff0c;事实并非如此…

php中没有dockerfile,Dockerfile在RUN composer install命令中没有使用缓...

我以为我已经理解了Docker,但今天我发现了一些关于利用docker缓存的问题.这是我的dockerfileFROM quay.io/my_company/phpjenkinsWORKDIR /usr/src/my_projectADD composer.json composer.jsonADD composer.lock composer.lockRUN composer install -oADD . .RUN mkdir -p temp…

map循环遍历取值_Collection集合框架集和map

Collection集合框架集Java培训之Collection集合框架集MapMap概述Map与Collection并列存在。用于保存具有映射关系的数据:Key-ValueMap 中的 key 和 value 都可以是任何引用类型的数据Map 中的 key 不允许重复key 和 value 之间存在单向一对一关系&#xff0c;即通过指定的 key …

php查询字段前30个字符,php/json我的字段名被截断为30个字符。我能停下来吗?

好吧,我得到了一个供应商软件,他们说应该在ApachePHP服务器和MySQL数据库上运行。我没有这两个,所以我把它放在一个php-iis服务器上,并将代码转换为在SQL服务器上工作。前任。mysql_select_db->mssql_select_db(除其他外)所以我在一个PHP文件中有以下代码$query "SELE…

rserve php,使用Rserve远程执行R脚本

Rserve介绍Rserve是一个基于TCP/IP协议的&#xff0c;允许R语言与其他语言通信的C/S结构的程序&#xff0c;支持C/C,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供远程连接&#xff0c;认证&#xff0c;文件传输等功能。我们可以设计R做为后台服务&#xff0c;处理统计建模&…

搜索引擎提交软件_搜索引擎优化的发展史及SEO前景展望

SEO 是随着搜索引擎的普及而出现&#xff0c;并伴随搜索引擎的发展而发展的。关于搜索引擎和搜索引擎优化SEO 最初是怎么诞生的有很多种说法。有一个非常有趣的事实是&#xff0c;最早的一批SEO 甚至可以追溯到Yahoo 出现之前&#xff0c;我们可以把Yahoo 的传世人David Filo 和…

mongodb模糊查询_MongoDB的CRUD基本操作

原创&#xff1a;牛津小马哥Python后端工程师小李哥。在上周的推文中&#xff0c;我们介绍了MongoDB的数据库和集合的操作&#xff0c;现在&#xff0c;让我们来继续学习mongodb的另一个操作&#xff1a;CRUDCRUD操作&#xff1a;创建、读取、更新、删除文档。创建操作&#xf…

java有关问题,java经典有关问题!

java经典问题&#xff01;&#xff01;&#xff01;问题一&#xff1a;与equal的区别&#xff1f;和 equals 都是比较的,而前者是运算符,后者则是一个方法,基本数据类型和引用数据类型都可以使用运算符,而只有引用类型数据才可以使用 equals,下面具体介绍一下两者的用法以及区别…

python怎么创业_python创业

从GitHub中整理出的15个最受欢迎的Python开源框架。这些框架包括事件I/O&#xff0c;OLAP&#xff0c;Web开发&#xff0c;高性能网络通信&#xff0c;测试&#xff0c;爬虫等。Django:PythonWeb应用开发框架Django应该是最出名的Python框架&#xff0c;GAE甚至Erlang都有框架受…

python开发需要什么基础_零基础学习Python需要用什么开发工具?

对于学习Python的小伙伴&#xff0c;小编首推的Pycharm。首先&#xff0c;PyCharm用于一般IDE具备的功能&#xff0c;比如&#xff0c; 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制另外&#xff0c;PyCharm还提供了一些很好的功能用于Djan…