할 수 있는 방법을 허용한 사용자 정의 가능한 XML 파일 형식은?
-
03-07-2019 - |
문제
나는 사용자가 파일을 업로드하는 거래에 정보를 내 응용 프로그램이 있습니다.내가 원할 수 있으려면 사용자가 사용자는 자신의 파일 형식으로 이렇게 할 때 XML(또는 CSV).
그래서 내가 변환이 필요합에서 자신의 형식으로 포맷을 하기 전에 추가적인 처리를 수행합니다.나는 원하지 않을 만들 수 있고 이 XSLT 동으로 모든 시간을 사용자가 새로운 파일 형식으로 그래서 내가 원하는 UI 를 만드는 기본적으로 구축이 XSLT 문서입니다.
이것은 상대적으로 쉽게 CSV 파일 형식입니다.사용자가 말한 첫 번째 요소 맵 x 장 내 옆에 두 번째 요소 맵 7 개 분야 등등.
이것은 더 복잡한 파일 형식은 XML 중첩된 요소 등입니다.을 알고 있나의 좋은 UI 패러다임에 대한 이렇게?어떤 예를 볼 수 있는 웹에서 또는 다른 곳에서?내가 상상하는 사용자가를 설명하 전체 xpath 의 일환으로 매핑하거나 어쩌면 다운로드 XSD 고 사용하는 요소를 선택에 대한 매핑(후에는 내가 필요할 것을 생성하 XSLT).
내가 감사한 아이디어.
해결책
입력 XML을 간단한 방식으로 XML 형식에 매핑 할 수 있다면 사용자가 XPATH 표현식 세트가 필요합니다.
"간단한 길"으로 나는 매우 기본적인 것을 의미합니다. <xsl:apply-templates>
접근하다. 입력 XML에는 모든 데이터를 올바른 형식으로 포함하여 명확하게 해결할 수있는 개별 레코드가 있어야합니다. 단일 XPATH 표현식의 평가로 달성 할 수있는 것보다 더 복잡한 계산 또는 기타 특수 처리가 필요한 데이터는 없습니다.
입력이 다음과 같은 경우
<root>
<entry id="1" name"foo">
<data1>somevalue
<data2>othervalue</data2>
</data1>
</entry>
</root>
원하는 출력은 다음과 같습니다.
<records>
<record>
<id>1</id>
<name>foo</name>
<data1>somevalue</data1>
<data2>othervalue</data2>
</record>
</records>
그러면 사용자는 다음 매핑을 제공해야합니다.
- 루트 요소 : "루트"
- 레코드 요소 : "Entry"
- ID : "@id"
- 이름 : "@name"
- 데이터 1 : "data1"
- 데이터 2 : "data1/date2"
XSLT는 이와 같은 것입니다 ( "%"의 값은 위의 맵핑 구성에서 실제 XPATH 표현식으로 대체됩니다).
<xsl:template match="/">
<records>
<xsl:apply-templates select="%root element%/%record element%" />
</records>
</xsl:template>
<xsl:template match="%root element%/%record element%">
<record>
<id>
<xsl:value-of select="%id-xpath%[1]" />
</id>
<name>
<xsl:value-of select="%name-xpath%[1]" />
</name>
<!-- and so on -->
</record>
</xsl:template>
다른 팁
내가 제대로 이해한다면,당신은 당신에 대해 생각 UI 을 만드는 데 필요한 xslt 당신이 필요합니다.나는 가정이 웹 기반 응용 프로그램입니다.한 가지 방법을 사용하는 것입 xslt 렌더링하는 입력 xml html(내가 사용하는 경향이 있다 xmlverbatim).수정할 수 있습이 xslt 을 만들의 링크 노드입니다.또한,당신은 당신이 사용할 수 있습 xslt 를 생성하 xpath 한 요소들의이 부분을 연결.내가 사용하는 이(게시 Jeni Tennison 을 XSL-List 년)
<xsl:for-each select="ancestor-or-self::*">
<xsl:text />/<xsl:value-of select="name()" />
<xsl:text />[<xsl:number />]<xsl:text />
</xsl:for-each>
행하는 데 있는 것이 시각적 렌더링이 xml(오히려 좋아하 전망에 의해 주어진 MSIE 및 파이어폭스)하지만 추가적인 링크를 다시 응용 프로그램입니다.사용자는 다음 노드를 선택합니다.그 다음으로 당신을 제공 xpath 필요없이 당신이 필요 실제로 그것을 쓰다.
성 xslt 이 있는 경우 xpath 는 상당히 쉬워집니다.Tomalek 의 제안은 위의 같은 유효한 방법입니다.는 경우에 당신은 실제로 필요하지 않 xml 으로 최종 출력할 수 있는 더 나은 단순히 사용하여 xml 파서 수 있는 노드를 선택하여 주어진 xpath.
이것은 더 복잡한 정보를 받을 수 있을 포함하는 임의의 숫자를 기록의 코스입니다.이 경우 사용할 수 있는 단계별 접근방식 및 기술을 사용하 나는 거칠게 위에서 추출 기록에서 입력한 후 사용하여 접근 방식 개인을 식별 분야에 기록합니다.
Altova Mapforce 하나의 XML 스키마를 다른 XML 스키마에 매핑하고 XSL 변환을 생성하는 상용 제품입니다.
시험판을 보고이 복잡한 문제를 해결하는 방법을보고 싶을 수도 있습니다.