【问题标题】:how to use xpath on file xml如何在文件 xml 上使用 xpath
【发布时间】:2022-01-11 23:39:54
【问题描述】:

我构建了一些 xml 文件并声明了一个 DTD。

这是声明了 dtd 的 xml 文件:

现在,我想使用 xpath 语法。

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE farms[
    <!ELEMENT farms (farm+,worker+)> 
    <!ELEMENT farm (name, manager*, product+)> 
    <!ELEMENT product (name, type, cost)> 
    <!ELEMENT worker (name, phone)> 
    <!ELEMENT manager (name, phone)> 
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT type (#PCDATA)>
    <!ELEMENT phone (#PCDATA)>
    <!ELEMENT cost (#PCDATA)>
    <!ATTLIST farm
        fid ID #REQUIRED
        address CDATA #REQUIRED>
    <!ATTLIST product
        pid ID #REQUIRED> 
    <!ATTLIST worker
        mid IDREF #IMPLIED
        fid IDREF #REQUIRED>
    <!ATTLIST manager
        mid ID #REQUIRED>
    ]>



<farms> 
            <farm fid = "1" address="beer-sheva">
                <name>Neve Noy</name>
                <manager mid="2">
                    <name> RONI </name>
                    <phone>0545555572</phone>
                </manager>
                <manager mid = "3">
                    <name> DANI </name>
                    <phone>0545555542</phone>
                </manager>
                <product pid="4">
                    <name>Olive Oil</name>
                    <type>oil</type>
                    <coast>700</coast>
                </product>
            </farm>
            
            
            <farm fid="5" address="beer-sheva">
                <manager mid="6">
                    <name> Yossi </name>
                    <phone>0545555422</phone>
                </manager>
                <manager mid="9">
                    <name> Ron </name>
                    <phone>0545553222</phone>
                </manager>
                <product pid="8">
                    <name>Olive Oil</name>
                    <type>oil</type>
                    <coast>700</coast>
                </product>
            </farm>
    
    
            <worker mid = "2" fid = "1">
                <name> RONI </name>
                <phone> 0545555572</phone>
            </worker>       
            <worker mid = "3" fid = "1">
                <name> Dani </name>
                <phone>0545555572</phone>
            </worker>
            <worker fid="1">
                <name> Matan </name>
                <phone>05432323422</phone>
            </worker>
    
            
            //Worker than work in fram 5
            
            <worker mid="6" fid ="5">
                <name> Yossi </name>
                <phone>0545555422</phone>
            </worker>
            <worker mid="9" fid ="5">
                <name> Ron </name>
                <phone>0545553222</phone>
            </worker>
            <worker fid="5">
                <name> Haim </name>
                <phone>05432323422</phone>
            </worker>
            
</farms>

所以我尝试在 xpath 中使用 ID 和 idref,但是当我尝试这样做时:

//worker/id(fid)[@fid = "1"]/manager/name/text()

它不承认@fid 它是一个键 这是我第一次使用 xml 和 dtd,所以也许我没有声明好。

【问题讨论】:

  • 这是我第一次在世界上使用 xml 和 dtd 我正在尝试做的是学习如何在 xpath 上使用语法,看看哪些元素会回到我身边 现在我想玩使用 id 和 idref 就像没有认识到我在元素中有键
  • 所以您要查找特定员工的经理姓名?
  • 嗯,我试着找到所有在农场工作的工人,他们生产橄榄油,而不是由 Yossi 经理管理! @OldProgrammer
  • 我也尝试了解如何在 xpath 中使用 id 和 idref ... @OldProgrammer
  • 我可以从工人那里去农场吗? @OldProgrammer

标签: xml xpath dtd


【解决方案1】:

XPATH 并不真正支持您所说的导航类型。不过,您还有其他选择。

  1. 重新格式化 XML,使 WORKER 标记成为它们工作的 FARM 的子标记。

  2. 通过 XML 进行两次传递,一次从 WORKER 标记中获取 FARM id,然后第二次通过 FARM id 获取 FARM 信息。

第一项是更好的选择,因为它使您的 XML 更清楚地表示数据,但这并不总是一种选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2012-03-27
    • 2011-05-29
    相关资源
    最近更新 更多