gpt4 book ai didi

java - 解析器忽略的 Xml 默认属性值

转载 作者:行者123 更新时间:2023-11-30 11:15:30 27 4
gpt4 key购买 nike

我正在尝试使用 SAXStaxDOM 解析器(根据我的任务)解析 XMl 文件。我遇到的问题是所有解析器似乎都忽略了 XSD 架构中指定的属性的默认值。

 <complexType name="Tariff" abstract="true">
<sequence>
<element name="id" type="ID" />
<element name="monthly-fee" type="float" />
</sequence>
<attribute name="status" type="trns:Status" use="optional" default="active"/>
</complexType>

<complexType name="LocalTariff">
<complexContent>
<extension base="trns:Tariff">
<sequence>
<element name="internal-charge" type="trns:CallCharge" />
<element name="external-charge" type="trns:CallCharge" />
</sequence>
</extension>
</complexContent>
</complexType>

这是属性类型定义:

<simpleType name="Status">
<restriction base="string">
<enumeration value="active"></enumeration>
<enumeration value="supported"></enumeration>
<enumeration value="unavailable"></enumeration>
</restriction>
</simpleType>

我希望解析器自动插入带有默认值的缺失属性。

<local-tariff>
<id>id1</id>
<monthly-fee>20.5</monthly-fee>
<internal-charge>3.7</internal-charge>
<external-charge>2.5</external-charge>
</local-tariff>

我的猜测是我没有指定一些参数来让解析器考虑我的 XSD

谁能请教我这个问题?我是 XML 的新手。任何帮助将不胜感激。

最佳答案

您要查找的内容来自 Post-Schema Validation Infoset不是来自 SAX 解析器。解析器只告诉您文档中的内容。您想要模式所隐含的内容,这意味着您必须有一个步骤来实际验证模式,否则系统如何知道模式所隐含的内容?

Here is a link关于如何使用 PSVI 作为 Apache Xerces 提供的 SAX 解析器的一部分。代码可能如下所示:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
PSVIProvider psviProvider = (PSVIProvider)reader;

然后看javadocs .您可以获取有关任何属性的信息,包括架构下的默认值。

关于java - 解析器忽略的 Xml 默认属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25382162/

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