首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过XSD在XML中验证小于(<)和大于(>)?

通过XSD在XML中验证小于(<)和大于(>)?
EN

Stack Overflow用户
提问于 2017-05-15 12:31:21
回答 1查看 1.8K关注 0票数 1

我有一个XML:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<data>
  <A>2&gt;1</A>
  <B>0&lt;1</B>
</data>

我想用这个XSD验证它:

代码语言:javascript
运行
复制
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="A">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="[^&lt;&gt;]+" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="B">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="[^&lt;&gt;]+" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

我使用xmllint进行验证,然后得到以下错误:

模式有效性错误:元素'A':facet‘模式’值'2>1‘不被模式’^<>接受。 模式有效性错误:元素'B':facet‘模式’‘值'0<1’不被模式'^<>‘接受

每个人都可以看到,在元素<B中没有>A。我有2&gt;10&lt;1。在xmllint验证xml之前,它将2&gt;1传输到2>10&lt;1传输到0<1,然后验证并报告它们是不正确的!

如何让字符串"2&gt;1""0&lt;1"传递一个模式,该模式要求字符串不应该小于或大于符号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 16:23:51

这是最新的XSD

代码语言:javascript
运行
复制
<xs:schema attributeFormDefault="unqualified"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="data">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="A" type="ltGtExpType"/>
        <xs:element name="B" type="ltGtExpType"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="ltGtExpType">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d+[&lt;&gt;]\d+" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

将验证您的XML,

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<data>
  <A>2&gt;1</A>
  <B>0&lt;1</B>
</data>

成功。

也就是说,您似乎试图在XSD级别上区分<&lt; (以及>&gt;)。这是不可能的,也不需要任何合理的要求无论如何。XML解析器将在验证之前进行这些替换。此外,作为其良好格式检查的一部分,XML解析器已经发布了一个错误,涉及到的任何文字<符号都不是开始标记的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43979660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档