【问题标题】:How to map a xml file to a new xml file based on a xsd in python?python - 如何基于python中的xsd将xml文件映射到新的xml文件?
【发布时间】:2021-08-05 23:43:46
【问题描述】:

我有 2 个 xsd 文件(A.xsd 和 B.xsd)。 A.xsd 包含 100 个元素,B.xsd 包含 20 个元素。 B.xsd 中的 20 个元素也包含在 A.xsd 中。

另外,我有一个 xml 文件,其架构对应于 A.xsd。

我想将 xml 中的 100 个元素映射到一个新的 xml 文件,其架构遵循 B.xsd。

在python中有没有简单的方法来处理这个问题?非常感谢!

A.xsd 示例

<xs:element name="name" type="xs:string"/>
<xs:element name="address1" type="xs:string"/>
<xs:element name="address2" type="xs:string"/>
<xs:element name="city" type="xs:string"/>

B.xsd 示例

<xs:element name="name" type="xs:string"/>
<xs:element name="city" type="xs:string"/>

xml 示例

<name>UNIONTOWN, PA</name>
<address1>testtesttest</address1>
<address2>testtesttest Commons</address2>
<city>Uniontown</city>

第二个 xml 示例(最终需要)

<name>UNIONTOWN, PA</name>
<city>Uniontown</city>

【问题讨论】:

  • 您的问题暗示B.xsdA.xsd 的子集。仅使用 XML 文件的一部分 XSD 是不可能成功验证 XML 文件的。
  • 但可以肯定的是,minimal reproducible example 是必需的。这应该很容易,因为您的 XSD 似乎很小。所以A.xsdB.xsd 和一个示例 XML 文件将需要给你一个很好的答案。

标签: python xml xsd


【解决方案1】:

所以你正在做一个删除 B.xsd 中未定义的元素的转换?好吧,如果这两个模式足够简单,您可以进行一个 XSLT 转换,将这两个模式作为输入,构建一个在 A 中声明但不在 B 中声明的元素列表,并以 XSLT 的形式输出这个列表删除相关元素的样式表:

<xsl:template match="address1|address2"/>

加上一个身份模板规则以复制其他所有内容不变。

当然,不能保证此转换的输出实际上对 B.xsd 有效 - 这取决于差异的确切性质。

【讨论】:

  • 帮助很大!感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多