2017-10-25 5 views
0

다음 형식의 XML을 사용하고 있습니다.XML에서 동일한 상위 내에서 중복 된 자식에 대한 예외를 throw합니다.

샘플 XML :

{ 
    <message> 
     <parent1> 
      <child>A</child> 
      <child>B</child> 
      <child>C</child> 
     </parent1> 
     <parent2> 
      <child>A</child> 
      <child>B</child> 
      <child>B</child> 
     </parent2> 
    </message> 
} 

원하는 출력 :

예외 : 부모 (2) 중복 된 아이가 포함되어 있습니다.

XML에서 유효성 검사를 수행하려면 XSLT 코드를 작성하는 데 도움을주십시오.

업데이트하는 것은

이것은 내가 지금까지 무엇을 가지고 :

XML 유효성 검사는 일반적으로 [XML 스키마 (https://en.wikipedia.org/wiki에서 이루어집니다
<xsl:stylesheet version="1.0" 
       xmlns:xsl="w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" encoding="utf-8" indent="no"/> 
    <xsl:template match="parent"> 
    <xsl:copy-of select="*" /> 
    <xsl:for-each select="child"> 
     <xsl:variable name="node_child" select="text()"/> 
     <xsl:variable name="numEntries" 
        select="count(../child[text()=$node_child])"/> 
     <xsl:if test="$numEntries &gt; 1"> 
     <xsl:text>Child value of </xsl:text> 
     <xsl:text> has multiple entries &#xa;</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

/XML_schema)가 XSLT에 없습니다. 이것은 '과 같은 것이다. 구글은 XML 스키마를 작성하는 방법. – Dmitry

+0

무엇을 시도 했습니까? XSLT에서이 작업을 수행하기는 쉽지만 (XSD 유효성 검사에서는 조금 더 어려움) 도움을 청하기 전에 직접 문제를 해결하지 않으면 아무 것도 배울 수 없습니다. –

답변

0
<xsl:template match="child 
        [some $s in preceding-sibling::* 
        satisfies deep-equal(., $s)]"> 
    <xsl:message terminate="yes" 
    >Dying: duplicate element <xsl:copy-of select="."/> 
</ 
+0

위 코드를 공유해 주셔서 감사합니다. 나는 당신의 말을 계속 지킬 것입니다. 위 코드는 2.0 버전에 좋지만 1.0 버전에는 몇 가지 방법이 필요합니다. 당신이 아래에 코드를 가지고 있다고 제안 할 수 있습니까?하지만 오류를 두 번 인쇄하고 있습니다. 수정하는 데 도움을 줄 수 있습니까? –

+0

{xsl : stylesheet version = "1.0"xmlns : xsl = "http://www.w3.org/1999/XSL/Transform"> \t \t \t \t \t \t 자식 값은 복수 항목이 있습니다 가 선택한 \t } –

+0

미안; 질문에 1.0 태그를 알지 못했습니다. 테스트에서 동일한 두 요소가있는 경우 코드에서 각 요소에 대해 오류 메시지를 한 번씩 발행합니다. 만약 당신이 오직 형제들 사이의 중복을 검사한다면 ('.. -sibling :: child'가 아닌'../ child'를 사용하십시오), 오류를 한 번만 얻을 것입니다. 일부 text() 노드의 신원은 실제로 복사에 대한 매우 약한 (오류가 발생하기 쉬운) 테스트입니다. 귀하의 데이터에 효과가있을 수 있지만 일반적으로 작동하지는 않습니다. –

관련 문제