我有一個XML及其XSD文件。所以,XSD表示哪些是XML的必需字段,我需要提取它們 - 基本上只包含必需字段的新XML(坦率地說,我需要XSD中有minOccurs='1'
的節點)。我知道我需要XSLT,但是有什麼方法/應用程序來生成XSLT,它只會提取XSD文件中具有minOccurs='1'
的節點。使用XSD過濾XML
0
A
回答
2
這是爲任意模式做這件事很棘手。例如,您可能會遇到類似(A B A?B)的內容模型,其中第一個A是強制性的,第二個是可選的。或者,當然,您可能會遇到minOccurs =「2」。我不認爲有任何捷徑;這是一個重要的項目。但是,如果您準備軟化需求,例如只處理以特定方式編寫的模式,或者避免使用尷尬的構造,那麼它可能會更容易。
+0
好吧,我不會遇到minOccurs =「2」,這是肯定的。我想到伍迪的建議使用XPath。但是你提到的很多例子像(A B A?B *)。我也得到了XMLSpy,我會稍微琢磨一下,看看可以做些什麼 –
4
如果您使用xsd文件作爲文檔並且結構簡單,則可以在一個文檔中完成。因此,考慮的一個模式:
<xs:element name="nodes">
<xs:complexType>
<xs:sequence>
<xs:element name="test1" minOccurs="1"/>
<xs:element name="test2" minOccurs="0"/>
<xs:element name="test3" minOccurs="0"/>
<xs:element name="test4" minOccurs="1"/>
<xs:element name="test5" minOccurs="0"/>
<xs:element name="test6" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
和一個XML文件,如:
<nodes>
<test1>blah</test1>
<test2>blah</test2>
<test3>blah</test3>
<test4>blah</test4>
<test5>blah</test5>
<test6>blah</test6>
</nodes>
那麼這個樣式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="xsd" select="document('so.xsd')"/>
<xsl:template match="/">
<xsl:apply-templates select="nodes"/>
</xsl:template>
<xsl:template match="nodes">
<allowed>
<xsl:variable name="allowedNodes" select="$xsd//xs:element[@name='nodes']"/>
<xsl:for-each select="*">
<xsl:variable name="name" select="name()"/>
<xsl:if test="$allowedNodes//xs:element[@name=$name and @minOccurs='1']">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</allowed>
</xsl:template>
</xsl:stylesheet>
會給你:
<?xml version="1.0" encoding="UTF-8"?>
<allowed xmlns:xs="http://www.w3.org/2001/XMLSchema">
<test1>blah</test1>
<test4>blah</test4>
</allowed>
相關問題
- 1. 使用SAX過濾XML流
- 2. 過濾XML通過使用AS3節點
- 3. delphi使用XSD處理XML
- 4. eclipse:使用xsd驗證xml
- 5. 使用XML驗證XSD
- 6. 通過xsd驗證xml
- 7. 如何過濾比較XML和XSD的結果?
- 8. 使用Xsd驗證Xml並更新Xml
- 9. 使用JDOM驗證xml使用xsd
- 10. JDOM XML過濾
- 11. 過濾XML使用XSLT不工作
- 12. 使用PowerShell Where-Object過濾xml
- 13. 如何使用xpath過濾xml數據?
- 14. 如何使用jquery過濾xml數據?
- 15. 使用LINQ來過濾XML文件
- 16. Noob LINQ - 使用XDocument讀取,過濾XML
- 17. 使用Powershell從xml中過濾數據
- 18. 過濾XML文檔使用XPATH在Java
- 19. 使用Javascript過濾xml文件
- 20. 使用jquery過濾XML結果
- 21. 過濾XML使用屬性值
- 22. 使用jQuery進行順序XML過濾?
- 23. 如何通過使用XML的XSLT過濾器的XML PARAMS
- 24. 用於XML過濾的XSLT
- 25. 用LinQ過濾XML數據
- 26. XML過濾器應用於非XML值
- 27. Spring集成XSD驗證過濾器
- 28. 如何過濾XML
- 29. xml過濾屬性
- 30. 過濾XML節點
有一些編輯器可讓您以xslt格式保存xsd文件,但AFAIK沒有一個編輯器可以在轉換之前將轉換應用於xsd文件。 –