2008-11-19 8 views
0

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

+0

Метод выбора Сергея - это то, что я собирался опубликовать сам. Любая предварительная обработка представленных документов обычно запрашивает проблемы. Я бы предложил вернуться к этому, потому что ваша схема определяет ваш интерфейс приложений, и там, где это возможно, вы должны требовать, чтобы люди соответствовали ему. – 2008-11-19 21:36:19

+0

@David Hall - я объяснил это моему менеджеру, но мне сказали не «беспокоиться» о клиенте с такими незначительными изменениями и «иметь дело с ним» :-) – Developer 2008-11-19 22:17:16

ответ

0

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

0

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

+0

Я объявил еще один элемент как «Roookie» в схемы. Существует специальная функция, которая проверяет входные данные обоих узлов и возвращает тот, у которого есть значение, так как из них всегда будет присутствовать в документе ... это будет работать для меня – Developer 2008-11-19 22:18:58

2

Вы могли бы препроцессировать неправильный файл 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

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

Смежные вопросы