我已经在互联网上搜索了 24 小时,但找不到有效的解决方案。
我有一个包含导入行的架构文件:
<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation=
"http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/xmldsig-core-schema.xsd"/>
Run Code Online (Sandbox Code Playgroud)
这是我验证 Xml 的代码:
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, @"C:\TEMP\myschema.xsd");
XmlReader xmlReader = XmlReader.Create(new StringReader(document.InnerXml), settings);
while (xmlReader.Read()) { }
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到:The 'http://www.w3.org/2000/09/xmldsig#:Signature' element is not declared.
如果我将代码(根据搜索建议)更改为:
settings.ValidationType = ValidationType.DTD;
settings.DtdProcessing = DtdProcessing.Parse;
Run Code Online (Sandbox Code Playgroud)
然后我没有收到错误,但验证不起作用,因为我故意插入了一个无效值来测试验证是否正常工作。
我尝试添加直接导入的架构:
settings.Schemas.Add(null, @"C:\TEMP\xmldsig-core-schema.xsd");
Run Code Online (Sandbox Code Playgroud)
但收到错误:For security reasons DTD is prohibited in this XML document. To enable DTD processing...
我已经尝试了我能想到的以及搜索建议的 XmlReaderSettings 设置的所有组合。
我现在真的很困惑。
那么,如何拥有一个具有简单内容且具有枚举值限制的 XSD 复杂类型呢?
(!) 没有额外的简单类型:
所以...有点像这样: -- 仅工作;) (请注意,这是一个简化的示例。请参阅我喜欢实现的 xml)
<element name="question">
<complexType>
<simpleContent>
<enumeration value="no"></enumeration>
<enumeration value="maybe"></enumeration>
<enumeration value="yes"></enumeration>
<xs:attribute name="name" type="xs:string" />
</extension>
</simpleContent>
</complexType>
</element>
Run Code Online (Sandbox Code Playgroud)
--
最后,这是我的 xml 的模拟:
<question name="foo">
yes
</question>
Run Code Online (Sandbox Code Playgroud)
我正在使用 JAX-WS 生成自上而下的 Web 服务。在 wsdl 中,我导入一个包含所有必要元素的 xsd。我需要在soap 请求中以大写形式显示所有xml 节点,因此我将xsd 中的元素名称保留为大写。但是,在从 wsdl 生成类时,我可以看到 getter 和 setter 方法也以大写形式命名,但变量却没有。例如,如果我使用“SOURCE”作为 xsd 中的元素,我将获得相应的 getter 方法作为“getSOURCE”,而不是常规约定“getSource”。我尝试通过从架构生成 jaxb 类并单独保留 xsd 来进行游戏,但我无法获得预期的命名约定。
以下是使用的架构的一部分
<xs:complexType name="Data">
<xs:sequence>
<xs:element name="SEQ" type="xs:int"/>
<xs:element name="INDEX" type="xs:string"/>
<xs:element name="VALUE" type="xs:string"/>
</xs:sequence>
Run Code Online (Sandbox Code Playgroud)
这会在 jaxb 绑定后生成以下代码 -
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Data", propOrder = {
"seq",
"index",
"value"
})
public class Data {
@XmlElement(name = "SEQ")
protected int seq;
@XmlElement(name = "INDEX", required = true)
protected String index;
@XmlElement(name = "VALUE", required = true)
protected …Run Code Online (Sandbox Code Playgroud) 我想根据架构 (XSD) 创建一个 XML 文件。我在 StackOverflow 上发现了这个问题:使用 XSD 文件生成 XML 文件
它适用于像这样的简单示例:
var data = new ProfileType();
data.Name = "Test";
data.Address = "Street";
var serializer = new XmlSerializer(typeof(ProfileType));
using (var stream = new StreamWriter("D:\\test.xml")) serializer.Serialize(stream, data);
Run Code Online (Sandbox Code Playgroud)
但是如何将更多的类/类型添加到同一个 xml 文件中?如果我在下面添加这些代码行,它们会覆盖 text.xml 文件:
var data2 = new MemberType();
data2.Age = "25";
data2.Code = "Z14x";
data2.Color = "Red":
var serializer2 = new XmlSerializer(typeof(MemberType));
using (var stream = new StreamWriter("D:\\test.xml")) serializer2.Serialize(stream, data2);
Run Code Online (Sandbox Code Playgroud) 我正在尝试根据 XSD 验证 XML。在这个 XML 中有带命名空间和不带命名空间的标签。
<my:person xmlns:my="http://my.namespace.com">
<my:name>John Doe</my:name>
<my:year>1988</my:year>
<namespaceLessElement>some value</namespaceLessElement>
</my:person>
Run Code Online (Sandbox Code Playgroud)
我的 XSD 看起来像这样。验证失败,因为根据 XSD,namespaceLessElement有一个命名空间。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:myNamespace="http://my.namespace.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://my.namespace.com"
elementFormDefault="qualified">
<xs:element name="person" type="myNamespace:person"/>
<xs:complexType name="person">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="year" type="xs:int"/>
<xs:element name="namespaceLessElement" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
我找不到有关如何关闭namespaceLessElement. 有没有办法做到这一点?
有什么方法可以避免在 DOM 中保留空格(无论是哪个 java 库)?
我有一个由 XSD 架构验证的 XML 文件。通过这种模式,只有<text>元素包含文本。另一个元素仅包含元素节点。当我编辑 XML 文件时,对于大多数可见性,我有几种类型的空格,如制表符、空白、回车符、...
如何在不保留所有未经架构授权的空格的情况下解析我的 XML(没有 xslt,只有 java 库)?
我正在尝试使用 xsd 模式验证 xml,但在验证时它会抛出,
java.net.MalformedURLException:无协议:
到目前为止我所做的是,
public boolean ValidateXML(String xmlContent) throws Exception {
try
{
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(getClass().getClassLoader().getResource("ABC/XYX/PQR.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(xmlContent));
}...
Run Code Online (Sandbox Code Playgroud)
出了什么问题,validator.validate这一步抛出异常,我需要在这里提供编码字符串吗?
如果我用文件来做,我指的是文件中的 xmlContent,
validator.validate(new StreamSource(new File(filePath)));
Run Code Online (Sandbox Code Playgroud)
然后就可以正常工作了。我不想要来自文件的 xml 内容,而是来自字符串对象
在我的 XSD 中,我尝试使用alternative标签。由于某些原因,我在 IDE (PHPStorm) 中遇到此错误:
无效内容以元素“xs:alternative”开头...
XSD
<xs:complexType name="tableType">
<xs:sequence>
<xs:element type="columnType" name="column" maxOccurs="unbounded" minOccurs="0"/>
<xs:element type="keyType" name="key" maxOccurs="unbounded" minOccurs="0">
<xs:alternative test="@type='index'" type="keyIndexType"/>
<xs:alternative test="@type='unique'" type="KeyUniqueType"/>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
我发现我不应该添加更多东西来使用 1.1 xsd 版本,但是我需要一些东西来支持alternative标签吗?
我正在尝试在 Azure 数据工厂复制活动中使用 XSD 验证(以 XML 作为源)。我有一个外部 XSD 文件。我还试图了解如何在 Azure 数据工厂中使用它。在复制活动中,验证类型部分下有两个选项 XSD 和 DTD。但是,它没有任何方法将任何外部文件指定为 XSD。文档对此也没有明确说明。(https://learn.microsoft.com/en-us/azure/data-factory/format-xml)。官方文档是这样说的:
XML schema validation:
You can choose to not validate schema, or validate schema using XSD or DTD.
When using XSD or DTD to validate XML files, the XSD/DTD must be referred inside the XML
files through relative path
Run Code Online (Sandbox Code Playgroud)
我对这里的第二点感到困惑。
“XML 必须在 XML 文件内引用”是什么意思?
我怎么能要求"地址"元素?
如果我对没有"地址"的文档执行XSD验证,它会通过,但我希望它失败.
这可能吗?
http://en.wikipedia.org/wiki/XSD 查看示例xsd.它隐藏了我的xsd样本
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Address">
<xs:complexType>
<xs:sequence>
<xs:element name="Recipient" type="xs:string" />
<xs:element name="House" type="xs:string" />
<xs:element name="Street" type="xs:string" />
<xs:element name="Town" type="xs:string" />
<xs:element name="County" type="xs:string" minOccurs="0" />
<xs:element name="PostCode" type="xs:string" />
<xs:element name="Country">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="FR" />
<xs:enumeration value="DE" />
<xs:enumeration value="ES" />
<xs:enumeration value="UK" />
<xs:enumeration value="US" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)