java - XML 架构文件到字符串

标签 java xml xsd schema

我想要获取一个包含重定义元素的 XSD 文件,其中另一个 schemaLocation 为字符串,其中已处理重定义(该字符串应表示合并的 2 个 XSD 文件)。 这可能吗?

(我正在使用 Xerces2-j --> java)

我无法从架构生成文档或有效字符串:

SchemaFactory schemaFactory = 
  SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
Schema schemaXSD = schemaFactory.newSchema( new File ( "example.xsd" ) );

或者让 XML 解析器处理重新定义(这会将重新定义加载为节点,而无需打开/加载第二个文件):

DocumentBuilderFactory parserFactory = DocumentBuilderFactory.newInstance();
parserFactory.setNamespaceAware(true);
DocumentBuilder parser = parserFactory.newDocumentBuilder();
return parser.parse(new File ( "example.xsd" ));

最佳答案

首先让我们看看我是否可以根据我的理解来说明您的问题。

假设您有架构 A.xsd:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="Base">
        <xsd:sequence>
            <xsd:element name="First"/>
        </xsd:sequence>
    </xsd:complexType>  
</xsd:schema>

重新定义一个(B 重新定义 A):

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XSR Module (http://www.paschidev.com)-->
<xsd:schema xmlns="[{no target namespace}]" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="[{no target namespace}]" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:redefine schemaLocation="A.xsd">
        <xsd:complexType name="Base">
            <xsd:complexContent>
                <xsd:extension base="Base">
                    <xsd:sequence>
                        <xsd:element name="Second" minOccurs="0"/>
                    </xsd:sequence>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:redefine>
</xsd:schema>

我对你说的一个字符串的理解,其中已经处理了重新定义(该字符串应该代表合并的 2 个 XSD 文件) 如下:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:annotation>
        <xsd:documentation xmlns="">Generated from "Set1" under "Release1"</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType name="Base">
        <xsd:sequence>
            <xsd:element name="First" type="xsd:anyType"/>
            <xsd:element minOccurs="0" name="Second" type="xsd:anyType"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

如果这就是您所问的问题,那么我不知道有任何 Java 解决方案可以自动执行所请求的重构。是可以做到的;据我所知,你必须自己编写代码。

我所知道的唯一一个专门为涵盖您的场景而设计的工具是与我相关的工具,但它仅在 .NET 上运行(最近它需要 .NET 4.0,这使得 Mono 平台遥不可及)。

关于java - XML 架构文件到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18998734/

相关文章:

java - 有效地设置 Android View 背景图片会给出 java.lang.OutOfMemoryError

java - 单击时更改 android 按钮颜色而不更改边框颜色?

java - 另一个 Java XML 库问题

c# - Xml序列化序列问题

java - 如何编写xpath表达式来查找死代码

java - 如何在java中将两个文件中的数据逐行写入到一个公共(public)文件中

c# - 如何根据架构 (XSD) 验证 XML?出了点问题

xml - XPath 选择具有不同名称的同一级别节点

xml - 如何使用工具检查xsd模式本身是否有效?

java - 如何将 Glassfish 4.1 Server 运行时添加到 Eclipse Indigo?