C# 读取XML节点值

堆代码的爱因斯坦 2018-08-01 10:09:20
<RCMR_IN000031UV01 ITSVersion="XML_1.0" xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 file:///E:/hl7/HL7/v3ballot_fullsite_2011MAY/v3ballot/html/processable/multicacheschemas/RCMR_IN000031UV01.xsd">
<!--id-消息流水号-->
<id root="2.16.156.10011.2.5.1.1" extension="22a0f9e0-4454-11dc-a6be-3603d6866807"/>
<!--creationTime-消息创建时间-->
<creationTime value="20130501130624"/>
<!--interactionId-消息的服务标识-->
<interactionId root="2.16.156.10011.2.5.1.2" extension="RCMR_IN000031UV01"/>
<!--processingCode-处理代码。标识此消息是否是产品、训练、调试系统的一部分。D:调试;P:产品;T:训练-->
<processingCode code="P"/>
<!--processingModeCode-处理模型代码。定义此消息是一个文档处理还是一个初始装载的一部分。A:存档;I:初始装载;R:从存档中恢复;T:当前处理,间隔传递。-->
<processingModeCode/>
<!--acceptAckCode-接收确认类型 AL:总是确认;NE:从不确认;ER:仅在错误/或拒绝时确认;SU:仅在成功完成时确认。-->
<acceptAckCode code="AL"/>
<receiver typeCode="RCV">
<device classCode="DEV" determinerCode="INSTANCE">
<id>
<item root="2.16.156.10011.2.5.1.3" extension="1111"/>
</id>
</device>
</receiver>
<sender typeCode="SND">
<device classCode="DEV" determinerCode="INSTANCE">
<id>
<item root="2.16.156.10011.2.5.1.3" extension="222"/>
</id>
</device>
</sender>
<controlActProcess classCode="CACT" moodCode="EVN">
<queryByParameter>
<!--查询ID-->
<queryId extension="18204"/>
<!--文档类型-->
<clinicalDocument.code>
<value code="C0001" codeSystem="2.16.156.10011.2.5.1.23" codeSystemName="文档类型代码">
<displayName value="病历概要"/>
</value>
</clinicalDocument.code>
<!--文档流水号-->
<clinicalDocument.id>
<value root="2.16.156.10011.2.5.1.24" extension="文档流水号"/>
</clinicalDocument.id>
<!--患者就诊号-->
<encompassingEncounter.id>
<value root="2.16.156.10011.1.12" extension="住院号"/>
<value root="2.16.156.10011.1.11" extension="门诊号"/>
</encompassingEncounter.id>
<!--患者id-->
<patient.id>
<value root="2.16.156.10011.2.5.1.4" extension="PatientID"/>
<value root="2.16.156.10011.1.3" extension="患者身份证号"/>
<semanticsText value="赵五"/>
</patient.id>
</queryByParameter>
</controlActProcess>
</RCMR_IN000031UV01>

比如我要读取 patient.id 下面的 extension="患者身份证号 对应的root值

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
然后??
...全文
432 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 weixin_40068689 的回复:
string xml = "<RCMR_IN000031UV01 ITSVersion='XML_1.0' xmlns='urn: hl7 - org:v3' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='urn:hl7-org:v3 file:///E:/hl7/HL7/v3ballot_fullsite_2011MAY/v3ballot/html/processable/multicacheschemas/RCMR_IN000031UV01.xsd'><patient.id><value root = \"2.16.156.10011.2.5.1.4\" extension = \"PatientID\" /><value root = \"2.16.156.10011.1.3\" extension = \"患者身份证号\" /><semanticsText value = \"赵五\" /></patient.id>";


我的电脑问题????
BXS_null 2018-08-01
  • 打赏
  • 举报
回复
string xml = "<RCMR_IN000031UV01 ITSVersion='XML_1.0' xmlns='urn: hl7 - org:v3' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='urn:hl7-org:v3 file:///E:/hl7/HL7/v3ballot_fullsite_2011MAY/v3ballot/html/processable/multicacheschemas/RCMR_IN000031UV01.xsd'><patient.id><value root = \"2.16.156.10011.2.5.1.4\" extension = \"PatientID\" /><value root = \"2.16.156.10011.1.3\" extension = \"患者身份证号\" /><semanticsText value = \"赵五\" /></patient.id>";
BXS_null 2018-08-01
  • 打赏
  • 举报
回复
System.Xml.XmlNode node = xmlDoc.SelectSingleNode("//"+"patient.id"+ "/value");
我只取了
<patient.id>
<value root="2.16.156.10011.2.5.1.4" extension="PatientID"/>
<value root="2.16.156.10011.1.3" extension="患者身份证号"/>
<semanticsText value="赵五"/>
</patient.id>

这一段试了下结果是:value root = "2.16.156.10011.2.5.1.4" extension = "PatientID" value root = "2.16.156.10011.1.3" extension = "患者身份证 号" semanticsText value = "赵五"
  • 打赏
  • 举报
回复
xmlDoc.SelectSingleNode("/controlActProcess/queryByParameter/patient.id/value")
为何这样也取不到节点呢
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
"//*[@extension='患者身份证号']" 是 XPath 搜索表达式,当然可以取到任何节点。只要你学习一下 XPath
多谢,已经看了XPath
xuzuning 2018-08-01
  • 打赏
  • 举报
回复
"//*[@extension='患者身份证号']" 是 XPath 搜索表达式,当然可以取到任何节点。只要你学习一下 XPath
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
            XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
System.Xml.XmlNode node = xmlDoc.SelectSingleNode("//*[@extension='患者身份证号']");
Console.WriteLine(node.Attributes["root"].InnerText);

为何采用 这样的样式/controlActProcess/queryByParameter/patient.id/取不到呢
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
            XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
System.Xml.XmlNode node = xmlDoc.SelectSingleNode("//*[@extension='患者身份证号']");
Console.WriteLine(node.Attributes["root"].InnerText);
确实可用,请问这个是可以取到任何节点的吗。类似于正则表达式
xuzuning 2018-08-01
  • 打赏
  • 举报
回复
            XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
System.Xml.XmlNode node = xmlDoc.SelectSingleNode("//*[@extension='患者身份证号']");
Console.WriteLine(node.Attributes["root"].InnerText);
BXS_null 2018-08-01
  • 打赏
  • 举报
回复
sorry sorry 是我搞错了 我的那个代码块里面还有其他判断 string a=node.InnerText的时候就采用截取了。所以会出现那个结果。sorry。
刚刚调试看了一下,如果patient.id 里面是<value xxxx> 这种值的话在node.InnerText是没有值的
我上面的结果是截取出来的 sorry 搞错了哈
  if (string.IsNullOrEmpty(val))
{
int index = xml.IndexOf("<" + tag + ">");
if (index >= 0)
{
val = xml.Substring(index + tag.Length + 2);
index = val.IndexOf("</" + tag + ">");
if (index >= 0)
{
val = val.Substring(0, index);
val = val.Replace("<", "").Replace(">", "").Replace("/", "").Trim();
}
}
}

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧