У меня есть XML и его XSD-файл. Итак, XSD говорит, какие обязательные поля XML и мне нужно извлечь только их - в основном новый XML с только необходимыми полями (честно говоря, мне нужны узлы, которые имеют minOccurs='1'
в XSD). Я знаю, что для этого мне нужен XSLT, но есть ли способ/приложение для создания XSLT, который будет извлекать только узлы с minOccurs='1'
в XSD-файле.Фильтр XML с XSD
ответ
Это сложно сделать это для произвольной схемы. Например, вы можете столкнуться с моделью контента, например (A B A? B), где первый A является обязательным, а второй является необязательным. Или, конечно, вы можете столкнуться с minOccurs = "2". Я не думаю, что есть короткие сокращения; это важный проект. Однако, если вы готовы смягчить это требование, например, чтобы обрабатывать только схемы, написанные определенным образом или избегать неловких конструкций, тогда это может быть довольно просто.
ну, я не буду сталкиваться с minOccurs = "2", это точно. Я думал об использовании XPaths по предложению Вуди. Но есть много примеров, которые вы упомянули как (A B A? B *). У меня также есть XMLSpy, я немного поработаю с ним и посмотрю, что можно сделать –
Если вы использовали файл 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. XML с XSD JAVA
- 2. Связывание xml с xml-схемой (xsd)
- 3. XML-XSD с использованием SSIS
- 4. Связывание файла XSD с XML
- 5. Проверка XML с помощью XSD
- 6. xml, проблемы с проверкой xsd
- 7. Проверка схемы Xml с xsd
- 8. XML/XSD с пространством имен
- 9. Проверка XML с использованием XSD
- 10. XSD to XML с импортом
- 11. Фильтр xml с LINQ2XML
- 12. Фильтр XML с E4X
- 13. Application проверяет XML против XSD: разрешить ссылку XSD в XML
- 14. Ограничение XML/XSD
- 15. XML validation againts XSD
- 16. XML + XSD => Java?
- 17. Validate XML против XSD: Необъявленная XSD элемент
- 18. проблема XSD - пытается генерировать XSD из XML
- 19. XML XSL XSD Валидация:
- 20. Проверка схемы XML (XSD)
- 21. XML/XSD - Добавление описаний
- 22. Построить XML из XSD
- 23. XSD и XML Validator
- 24. простая XML-схема - XSD
- 25. XSD Нечувствительная ошибка. Атрибут «Фильтр» не допускается
- 26. XML XSD Ошибка проверки
- 27. Проверка XML на XSD
- 28. Схема XML-RPC .xsd
- 29. Проверка xml через xsd
- 30. XML для преобразования XSD
Есть несколько редакторов, которые позволяют сохранять файлы xsd в формате xslt, но AFAIK не существует ни одного редактора, который также может применить преобразование к файлу xsd перед преобразованием. –