gpt4 book ai didi

java - 查找给定类型的 XML 属性

转载 作者:行者123 更新时间:2023-12-01 11:39:13 24 4
gpt4 key购买 nike

给定架构如下:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://my.namespace/version/1" xmlns:tns="http://my.namespace/version/1" elementFormDefault="qualified">
<xs:simpleType name="isbn">
<xs:restriction base="xs:string">
<xs:pattern value="(\d{10}|\d{13})"/>
</xs:restriction>
</xs:simpleType>

<xs:element name="inventory">
<xs:complexType>
<xs:all>
<xs:element ref="tns:cd"/>
<xs:element ref="tns:book"/>
</xs:all>
</xs:complexType>
</xs:element>

<xs:element name="book">
<xs:complexType>
<xs:attribute name="id" use="required" type="tns:isbn"/>
</xs:complexType>
</xs:element>

<xs:element name="cd">
<xs:complexType>
<xs:attribute name="id" use="required" type="tns:isbn"/>
</xs:complexType>
</xs:element>
</xs:schema>

以及相应的 XML 文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<inventory xmlns="http://my.namespace/version/1">
<book id="1000000000"/>
<cd id="1234567891234"/>
</inventory>

有没有办法使用 XPath 或其他一些基于查询的方法来选择 isbn 类型的所有属性?请注意,我不想按属性名称进行查询,而是按架构中定义的类型进行查询。

最佳答案

要根据模式类型进行匹配或选择,您需要使用模式感知 XSLT 2.0 或更高版本,或者模式感知 XQuery 1.0 或更高版本,其中您确保使用模式感知处理器将模式导入到 XSLT 或 XQuery 中,例如Saxon 9企业版EE。然后您可以使用attribute(*, prefix:isbn)根据类型选择属性。

一个简单的例子是

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mns1="http://my.namespace/version/1" exclude-result-prefixes="xs mns1">

<xsl:import-schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://my.namespace/version/1" xmlns:tns="http://my.namespace/version/1" elementFormDefault="qualified">
<xs:simpleType name="isbn">
<xs:restriction base="xs:string">
<xs:pattern value="(\d{10}|\d{13})"/>
</xs:restriction>
</xs:simpleType>

<xs:element name="inventory">
<xs:complexType>
<xs:all>
<xs:element ref="tns:cd"/>
<xs:element ref="tns:book"/>
</xs:all>
</xs:complexType>
</xs:element>

<xs:element name="book">
<xs:complexType>
<xs:attribute name="id" use="required" type="tns:isbn"/>
</xs:complexType>
</xs:element>

<xs:element name="cd">
<xs:complexType>
<xs:attribute name="id" use="required" type="tns:isbn"/>
</xs:complexType>
</xs:element>
</xs:schema>
</xsl:import-schema>


<xsl:template match="/">
<xsl:variable name="ex1">
<inventory xmlns="http://my.namespace/version/1" xsl:validation="strict">
<book id="1000000000"/>
<cd id="1234567891234"/>
</inventory>
</xsl:variable>

<xsl:value-of select="$ex1//attribute(*, mns1:isbn)"/>

</xsl:template>
</xsl:transform>

http://xsltransform.net/nc4NzQF/1 在线,将使用 Saxon 9.5 EE 进行测试。

它的目的是展示导入模式的工作原理以及属性选择的工作原理,在现实生活中,您可能希望使用经过验证的输入文档,而不是带有经过验证的文字结果元素的变量内容,但我不确定如何说服 xsltransform.net 验证输入文档,因此示例使用结果元素而不是输入元素。

关于java - 查找给定类型的 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com