我们可以在 DtD 上使用 Xpath

Can we use Xpath on DtD

我想找到特定的 XML_ELEMENT_DECL 类型的节点,而不是线性地遍历树,有没有办法使用 Xpath 来做到这一点?

使用 XML 示例,如何找到“UID”的 XML_ELEMENT_DECL 版本而不是 XML_ELEMENT_NODE 版本?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TSS [
    <!ELEMENT TSS (name, UID, Sequences*)>
    <!ATTLIST TSS doc CDATA #IMPLIED>
    <!ATTLIST TSS help CDATA "">
    <!ATTLIST TSS image CDATA #FIXED "C:\Users\dholstein\Documents\XML\icons\settings.png">
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT UID (#PCDATA)>
      <!ELEMENT Sequences (Sequence*)>
        <!ELEMENT Sequence (#PCDATA|Steps)*>
            <!ELEMENT Steps (Step*, dan1, dan2, dan3)>
            <!ELEMENT Step (#PCDATA)>
]>
<TSS doc="da man" image="C:\Users\dholstein\Documents\XML\icons\settings.png">
    <name><![CDATA[X-32 T&I]]></name>
    <UID> <![CDATA[123456]]></UID>
    <Sequences>
        <Sequence><![CDATA[DMWR Test]]>
            <Steps>
                <Step><![CDATA[Step 1]]>
                </Step>
                <Step><![CDATA[Step 2]]>
                </Step>
            </Steps>
        </Sequence>
        <Sequence><![CDATA[Verification]]></Sequence>
    </Sequences>
</TSS>
<!-- /TSS/Sequences/Sequence[contains(text(), 'DMWR')]/Steps/Step[contains(text(), 'Step 1')] -->

DTD 不是 parseable/searchable 的 XPath,后者是为 select 文件中的 XML 内容构建的,表示为树。只需在 DTD 部分执行 grep。

,XPath 不能用于 DTD 的 select 部分。

XPath 在 XML 上运行,并且 DTD 未在 XML 中表示。

另一方面,

XSD 是 XML,因此可以与 XPath 一起使用。

对任何新的 XML 模式开发工作使用 XSD 而不是 DTD;它们以许多有用的方式取代了 DTD,包括将它们自己表示为 XML.