Xml parsing 无法使用tcl和tdom解析具有多个名称空间的XML
我正在尝试使用tcl和tdom包解析XML。我很难做到这一点,因为我要解析的节点是具有多个名称空间的节点的子节点。如何解析realmCode或title元素?以下是我尝试过的:Xml parsing 无法使用tcl和tdom解析具有多个名称空间的XML,xml-parsing,tcl,tdom,Xml Parsing,Tcl,Tdom,我正在尝试使用tcl和tdom包解析XML。我很难做到这一点,因为我要解析的节点是具有多个名称空间的节点的子节点。如何解析realmCode或title元素?以下是我尝试过的: package require tdom set XML {<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="http://w
package require tdom
set XML {<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.cerner.com/cda_stylesheet/" ?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sdtc="urn:hl7-org:sdtc" xsi:schemaLocation="urn:hl7-org:v3 ../../../CDA%20R2/cda-schemas-and-samples/infrastructure/cda/CDA.xsd" classCode="DOCCLIN" moodCode="EVN">
<realmCode code="US" />
<title>Discharge Summary</title>
</ClinicalDocument>}
set nsmap {
a urn:hl7-org:v3
x http://www.w3.org/2001/XMLSchema-instance
s urn:hl7-org:sdtc
}
set doc [dom parse $XML]
set root [$doc documentElement]
set node [$root selectNodes -namespaces $nsmap "/a:ClinicalDocument/title"]
#set node [$root selectNodes "/ClinicalDocument/title"] ;# tried this as well - does not work
$doc delete
包需要时差
集合XML{
出院总结
}
设置nsmap{
urn:hl7组织:v3
xhttp://www.w3.org/2001/XMLSchema-instance
s urn:hl7组织:sdtc
}
set doc[dom parse$XML]
设置根[$doc documentElement]
设置节点[$root selectNodes-名称空间$nsmap”/a:ClinicalDocument/title“]
#设置节点[$root selectNodes”/ClinicalDocument/title“];#也尝试过这个-不起作用
$doc删除
您需要为路径的每个级别指定名称空间,而不仅仅是根。使用
set title [$root selectNodes -namespaces $nsmap /a:ClinicalDocument/a:title]
set realm [$root selectNodes -namespaces $nsmap /a:ClinicalDocument/a:realmCode/@code]
等等。您需要为路径的每个级别指定名称空间,而不仅仅是根。使用
set title [$root selectNodes -namespaces $nsmap /a:ClinicalDocument/a:title]
set realm [$root selectNodes -namespaces $nsmap /a:ClinicalDocument/a:realmCode/@code]
等等。这更多是为了完整性,不一定推荐。您可以指示tDOM忽略名称空间。看 观察:
set doc [dom parse -ignorexmlns $XML]
set root [$doc documentElement]
$root selectNodes "/ClinicalDocument/title"
$root selectNodes "/ClinicalDocument/realmCode/@code"
其后果是显而易见的:模棱两可。这更多是为了完整性,不一定推荐。您可以指示tDOM忽略名称空间。看 观察:
set doc [dom parse -ignorexmlns $XML]
set root [$doc documentElement]
$root selectNodes "/ClinicalDocument/title"
$root selectNodes "/ClinicalDocument/realmCode/@code"
结果很明显:模糊。这是必要的,因为XPath处理XML名称空间的方式(即不是很好)。改进建议:使用
$doc selectNodesNamespaces$nsmap
,这将使映射可用于所有selectNodes
调用。@Calvin先生,我不知道库;刚刚复制了OP的代码。这听起来很方便。这是必要的,因为XPath处理XML名称空间的方式(也就是说,不是很好)。改进建议:使用$doc selectNodesNamespaces$nsmap
,这将使映射可用于所有selectNodes
调用。@Calvin先生,我不知道库;刚刚复制了OP的代码。这听起来很方便。