Узлы в документе XML - PullRequest
       14

Узлы в документе XML

0 голосов
/ 20 ноября 2008

Я разработал XML-схему для анализа входящего XML-документа. Место получения получает XML-документы из 2 каналов, один из них с ошибкой наделил узел документа «Roookie» вместо «Rookie». Есть ли способ, чтобы мой существующий xsd проанализировал этот документ?

Ответы [ 4 ]

2 голосов
/ 20 ноября 2008

Возможно, вы могли бы предварительно обработать неправильный XML-файл, например, с помощью простой таблицы стилей XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="no"/>

<xsl:template match="Roookie">
        <Rookie>
                <xsl:apply-templates select="@*|node()" />
        </Rookie>
</xsl:template>

<xsl:template match="@*|node()" name="defaultRule">
        <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
</xsl:template>

</xsl:stylesheet>
0 голосов
/ 05 декабря 2008

Единственный ответ здесь - изменить плохое сообщение. XSD является контрактом, и его следует соблюдать, отправляя системы. Если у вас нет такого контроля над отправляющими системами, я бы предложил создать вторую схему с новым именем и учесть в ней орфографическую ошибку. Если вы начнете изменять свой контракт / xsd для каждой ошибки в сообщении, вы увеличите сложность и уменьшите удобство обслуживания.

0 голосов
/ 20 ноября 2008

Просто измените вашу схему, чтобы принять выбор между 2 узлами (Rookie или Roookie) вместо просто 1 узла с именем Rookie. Оба узла имеют одинаковый тип. Конечно, если Roo (o) kie имеет сложное содержимое, вы захотите объявить сложный тип для этого содержимого, чтобы избежать дублирования всей структуры 2 элементов.

0 голосов
/ 20 ноября 2008

Вам потребуется заменить элементы в документе или изменить xsd для работы с новым форматом документа.

...