我正在研究一些我应该包含特定XML元素的东西,只有当某些属性的值存在时(非空白)。
例如:
<Students>
<Student>
<Name First = "Robin" Last = "Douglas"/>
<Address StreetApt="1234, Test St" City= "Kansas City" State = "MO" />
<Results Year="2015" Sem="Spring" GPA="3.5"/>
</Student>
<Student>
<Name First = "Sam" Last = "Evans"/>
<Address StreetApt="5678, Test Blvd" City= "Kansas City" State = "MO" />
<Results Year="2015" Sem="Spring" GPA="3.9">
</Student>
<Student>
<Name First = "Zack" Last = "Roberts"/>
<Address StreetApt="9078, Test Ave" City= "Kansas City" State = "MO" />
<Results Year="2015" Sem="Spring" GPA="">
</Student>
</Students>
因此,在上面的示例中,如果您注意到,GPA
标记中的<Results />
属性为最后一个学生(名为&#34; Zack Roberts&#34;),则不包含任何数据。因此,要求是该特定属性为空,然后我必须删除该特定学生的整个<Results />
标记。因此,期望的结果将是:
<Students>
<Student>
<Name First = "Robin" Last = "Douglas"/>
<Address StreetApt="1234, Test St" City= "Kansas City" State = "MO" />
<Results Year="2015" Sem="Spring" GPA="3.5"/>
</Student>
<Student>
<Name First = "Sam" Last = "Evans"/>
<Address StreetApt="5678, Test Blvd" City= "Kansas City" State = "MO" />
<Results Year="2015" Sem="Spring" GPA="3.9">
</Student>
<Student>
<Name First = "Zack" Last = "Roberts"/>
<Address StreetApt="9078, Test Ave" City= "Kansas City" State = "MO" />
</Student>
</Students>
请告诉我如何实现这一目标? 我尝试在XSD中使用minOccurs
,maxOccurs
,但后来意识到这些是不用于此目的。
我的首要任务是对XSD进行一些更改并尝试实现结果。如果不可能那样,那么另一种可能的方式是什么?
请注意: 我已经提到了上面提到的一个例子。我正在处理的实时数据标签如下:
<OrganizationId ImportAction="addModify" Type="GLN" Identifier="1234567890123" Primary="false" StartDate="2000-01-01"/>
该要求提到如果Identifier
具有13位数值(13位数字),则仅保留<OrganizationId>
标记。在所有其他情况下,<OrganizationId>
标记不应出现。在我正在运行以生成此XML的Scribe作业中,我保留所有13位数值,否则用&#34;&#34;替换这些值。所以,如果你对我的特定情况有任何其他解决方案,那么我也欢迎这些!
答案 0 :(得分:1)
正如Mathias所提到的,不是考虑操纵XML(“删除”)而是考虑有效性。您已经说明了您的要求,Results
如果没有非空@GPA
则不应该出现。因此,我们要求GPA:
<xs:attribute name="GPA" use="required">
并且非空:
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
然后:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Students">
<xs:complexType>
<xs:sequence>
<xs:element name="Student" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Results" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence/>
<xs:attribute name="GPA" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
(为清楚起见,省略了非必要组件。它们的添加应该是直截了当的。)