我在
下面有一个特定的xml数据<l7:ApiPlans xmlns:l7="http://ns.xcompany.com/2012/04/api-management">
<l7:ApiPlan>
<l7:PlanPolicy>
<wsp:Policy xmlns:L7p="http://www.xcompany.com/ws/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy">
<wsp:All wsp:Usage="Required">
<wsp:All wsp:Usage="Required">
...... some other welformed xml
</wsp:All>
</wsp:All>
</wsp:Policy>
</l7:PlanPolicy>
</l7:ApiPlan>
</l7:ApiPlans>
我需要编写一个XSD(如果可能)来验证PlanPolicy是否以
开头<wsp:Policy xmlns:L7p="http://www.xcompany.com/ws/policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy">
<wsp:All wsp:Usage="Required">
<wsp:All wsp:Usage="Required">
以
结束 </wsp:All>
</wsp:All>
</wsp:Policy>
到目前为止,我有这个,
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://ns.xcompany.com/2012/04/api-management" xmlns:l7="http://ns.xcompany.com/2012/04/api-management">
<xs:element name="ApiPlans">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="l7:ApiPlan"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ApiPlan">
<xs:complexType>
<xs:sequence>
<xs:element ref="l7:PlanPolicy"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PlanPolicy" type="policyDataType"/>
<simpleType name="policyDataType">
<restriction base="xs:string">
<minLength value="1"></minLength>
<pattern value="(<).*(>).*(<).*(>)"></pattern>
</restriction>
</simpleType>
</xs:schema>
这可能吗?作为一个附带问题,你如何定义模式:新行(CR / LF),制表符和引号。
提前致谢
答案 0 :(得分:2)
我不会这样做。
好吧,给出一半的选择,我绝不会在XML中使用转义的XML - XML被设计为嵌套而不会转义,并且转义它只会让每个人的生活变得更加困难。
但是如果你必须像这样生活,我会在提取并解析它之后单独验证内部XML。没有必要在一次验证过程中完成所有操作。
答案 1 :(得分:-1)
是的,这绝对是可能的,正则表达式是您使用此非典型任务的唯一选择。请注意,转义的内容不会被处理为XML,而是作为字符串处理。
请务必阅读正则表达式中如何正确escape various special characters,包括括号。
换行符和制表符分别由\n
和\t
m表示。
可以通过加倍报价来输入报价。