Pergunta

Eu tenho um XML com o seguinte formato.

<RootNode>
    <Parent>
        <Child1>Some text about child 1</Child1>
        <Child2>Some text about child 2</Child2>
        ....
        ....
        <Child5>Some text about child 5</Child5>
        ....
        ....
        <Childn>Some text about child n</Childn>
    </Parent>
</RootNode>

Agora eu quero validar este XML contra o XSD.

Mas o problema é o número e o nome do nó das crianças não são consertados.

Por favor, verifique as seguintes amostras do meu arquivo

Amostra 1: Duas crianças com nome do nó Child1 e Child2

<RootNode>
    <Parent>
        <Child1>Some text about child 1</Child1>
        <Child2>Some text about child 2</Child2>
    </Parent>
</RootNode>

Amostra 2: Três crianças com nome do nó Child4 Child5 e Child8

<RootNode>
    <Parent>
        <Child4>Some text about child 4</Child4>
        <Child5>Some text about child 5</Child4>
        <Child8>Some text about child 8</Child8>
    </Parent>
</RootNode>

Eu quero que um valide o texto dentro do nó filho (que é mostrado como "algum texto sobre criança n") com a regra seguinte

Regra: O XML é inválido se qualquer nó filho - (filhos dos pais) tem comprimento de texto INER mais do que 256.

Isso significa considerar o XML inválido se houver um filho do nó "pai" tem texto interno por mais de 256 caracteres

Isso é possível usando a validação do esquema XSD? Você poderia me ajudar a criar um arquivo .xsd para validar isso?

desde já, obrigado

Foi útil?

Solução

Você não pode resolver isso com o XSD, como foi dito antes simplesmente porque não sabe quais todos os nomes de elementos serão antecipadamente. Se você não estiver totalmente ligado à validação do XSD, pode querer dar uma olhada Schematron o que pode fazer exatamente esse tipo de validação.

Outras dicas

Não é possível validar isso automaticamente porque o número máximo de nós filhos é desconhecido. Você pode obter escrevendo alguma validação manual.

Se você conseguir alterar o formato deste XML, deve, porque ele é mal projetado (principalmente porque não é validável ...). Você deve atirar para algo mais como:

<RootNode>
    <Parent>
        <Child num="1">...</Child>
        <Child num="2">...</Child>
    </Parent>
</RootNode>

Ou, se o pai puder conter outras coisas e as crianças, ter um recipiente para as crianças é útil:

<RootNode>
    <Parent>
        <OtherStuff/>
        <Children>
            <Child num="1">...</Child>
            <Child num="2">...</Child>
        </Children>
        <MoreStuff/>
    </Parent>
</RootNode>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top