首页 > 解决方案 > 无法使用 tcl 和 tdom 解析具有多个名称空间的 XML

问题描述

我正在尝试使用 tcl 和 tdom 包解析 XML。我在执行此操作时遇到了麻烦,因为我要解析的节点是具有多个命名空间的节点的子节点。我将如何解析 realmCode 或 title 元素?以下是我尝试过的:

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-parsingtcltdom

解决方案


您需要为路径的一级指定命名空间,而不仅仅是根。利用

set title [$root selectNodes -namespaces $nsmap /a:ClinicalDocument/a:title]
set realm [$root selectNodes -namespaces $nsmap /a:ClinicalDocument/a:realmCode/@code]

等等


推荐阅读