使用xpath和xquery解析xml文件

发布于 2024-09-26 06:58:00 字数 683 浏览 4 评论 0原文

我有一个 xml 文件,

<category>
    <type name="SWEATERS">
        <product id =1>
            <itemNumber>1</itemNumber>
            <name>ProductA2</name>
            <price>345</price>
        </product>
        <product id=2>
            <itemNumber>4</itemNumber>
            <name>Product Test </name>
            <price>456</price>
        </product>
    </type>
</category>

我使用了 xquery

$xml->xpath('//category/type/product[@id=1]');

当我使用这个 xquery 时,我只获取名称和价格。我如何获取类型名称“SWEATERS”以及名称和价格

I have a xml file

<category>
    <type name="SWEATERS">
        <product id =1>
            <itemNumber>1</itemNumber>
            <name>ProductA2</name>
            <price>345</price>
        </product>
        <product id=2>
            <itemNumber>4</itemNumber>
            <name>Product Test </name>
            <price>456</price>
        </product>
    </type>
</category>

I used the xquery

$xml->xpath('//category/type/product[@id=1]');

When i used this xquery iam getting only the name and price.How i can get the type name 'SWEATERS' along with name and price

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

最终幸福 2024-10-03 06:58:00

当我使用这个 xquery 时,我得到了
只有名称和价格。我怎样才能得到
类型名称“SWEATERS”以及
名称和价格

XPath 1.0 表达式应该是:

//category/type/product[itemNumber=1]/*[self::name or self::price]|
//category/type[product[itemNumber=1]]

或者更静态:

//category/type/product[itemNumber=1]/*[self::name or self::price]|
//category/type[@name='SWEATERS']

When i used this xquery iam getting
only the name and price.How i can get
the type name 'SWEATERS' along with
name and price

The XPath 1.0 expression should be:

//category/type/product[itemNumber=1]/*[self::name or self::price]|
//category/type[product[itemNumber=1]]

Or more staticly:

//category/type/product[itemNumber=1]/*[self::name or self::price]|
//category/type[@name='SWEATERS']
蓝咒 2024-10-03 06:58:00

如果您想选择 type 元素,则必须将表达式更改为:

//category/type[product/itemNumber=1]

或者仅选择名称:

//category/type [产品/项目编号=1]/@名称

If you want to select the type element, you have to change your expression to:

//category/type[product/itemNumber=1]

Or for just the name:

//category/type[product/itemNumber=1]/@name

梦言归人 2024-10-03 06:58:00

恐怕您无法使用 Xpath 进行单个查询来完成此操作,但您可以使用 DOMNode->parentNode 来完成此操作。

I'm afraid you can't do it with a single query with Xpath but you can do it with DOMNode->parentNode.

献世佛 2024-10-03 06:58:00

您可以尝试类似的操作:

$xml->xpath('//category/type[product/itemNumber=1]/(@name | product[itemNumber=1]/(name | price))');

这选择一个属性和两个元素。 | 是联合运算符

you can try something like:

$xml->xpath('//category/type[product/itemNumber=1]/(@name | product[itemNumber=1]/(name | price))');

this selects one attribute and two elements. The | is a union operator

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文