gpt4 book ai didi

xml - 处理撇号包围的 @id 值时 XPointer URL 未解析

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:57 25 4
gpt4 key购买 nike

此处 XInclude/XPointer 的令人沮丧的问题。

目的是将 XML 格式的价格条目列表中的条目包含到另一个文档中。我有一个包含价格列表的文档,如下所示:

 <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE preise [
<!ELEMENT preise (preis+)>
<!ELEMENT preis (#PCDATA)>
<!ATTLIST preis id ID #REQUIRED>
]>
<preise>
<preis id="a0">./.</preis>
<preis id='foo100'>136,10</preis>
<preis id='foo101'>163,32</preis>
</preise>

以下包含失败

 <xi:include href="../listen/preise.xml#xpointer(/preise/preis[@id='foo100']/text())" />

 element include: XInclude error : failed build URL

现在,如果我将价目表中的 id 格式更改为完全数字

 <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE preise [
<!ELEMENT preise (preis+)>
<!ELEMENT preis (#PCDATA)>
<!ATTLIST preis id ID #REQUIRED>
]>
<preise>
<preis id="a0">./.</preis>
<preis id='100'>136,10</preis>
<preis id='101'>163,32</preis>
</preise>

并使用不带撇号的包含

 <xi:include href="../listen/preise.xml#xpointer(/preise/preis[@id=100]/text())" />

突然一切正常。所以这个问题似乎与撇号有关,但我该如何解决这个问题?

此外,这是我的 xmllint 版本信息:

 xmllint: using libxml version 20706
compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib

最佳答案

来自XInclude W3C Spec :

The xi:include element has the following attributes:

href

A value which, after appropriate escaping (see 4.1.1 Escaping of href attribute values) has been performed, results in a URI reference or an IRI reference specifying the location of the resource to include. The href attribute is optional; the absence of this attribute is the same as specifying href="", that is, the reference is to the same document. If the href attribute is absent when parse="xml", the xpointer attribute must be present. Fragment identifiers must not be used; their appearance is a fatal error. A value that results in a syntactically invalid URI or IRI should be reported as a fatal error, but some implementations may find it impractical to distinguish this case from a resource error.

因此,“不得使用片段标识符;它们的出现是一个 fatal error 。

解决方案:尝试省略 href 属性并使用 xpointer 属性。

但是,请注意 following text 来自相同的规范:

Support for the [XPointer xpointer() Scheme] is not mandatory for full XInclude conformance. Authors are advised that use of xpointer() and other XPointer schemes than element() might not be supported by all conformant XInclude implementations

最后, here is an example from the spec 使用 XPointer 片段包含:

The following illustrates the results of including fragments of another XML document. Assume the base URI of the document is http://www.example.com/JoeSmithQuote.xml.

<?xml version='1.0'?>
<price-quote xmlns:xi="http://www.w3.org/2001/XInclude">
<prepared-for>Joe Smith</prepared-for>
<good-through>20040930</good-through>
<xi:include href="price-list.xml" xpointer="w002-description"/>
<volume>40</volume>
<xi:include href="price-list.xml" xpointer="element(w002-prices/2)"/>
</price-quote>

price-list.xml references a DTD which declares the id attributes as type ID, and contains:

<?xml version='1.0'?>
<!DOCTYPE price-list SYSTEM "price-list.dtd">
<price-list xml:lang="en-us">
<item id="w001">
<description id="w001-description">
<p>Normal Widget</p>
</description>
<prices id="w001-prices">
<price currency="USD" volume="1+">39.95</price>
<price currency="USD" volume="10+">34.95</price>
<price currency="USD" volume="100+">29.95</price>
</prices>
</item>
<item id="w002">
<description id="w002-description">
<p>Super-sized widget with bells <i>and</i> whistles.</p>
</description>
<prices id="w002-prices">
<price currency="USD" volume="1+">59.95</price>
<price currency="USD" volume="10+">54.95</price>
<price currency="USD" volume="100+">49.95</price>
</prices>
</item>
</price-list>

The infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

<?xml version='1.0'?>
<price-quote xmlns:xi="http://www.w3.org/2001/XInclude">
<prepared-for>Joe Smith</prepared-for>
<good-through>20040930</good-through>
<description id="w002-description" xml:lang="en-us"
xml:base="http://www.example.com/price-list.xml">
<p>Super-sized widget with bells <i>and</i> whistles.</p>
</description>
<volume>40</volume>
<price currency="USD" volume="10+" xml:lang="en-us"
xml:base="http://www.example.com/price-list.xml">54.95</price>
</price-quote>

关于xml - 处理撇号包围的 @id 值时 XPointer URL 未解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4225639/

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