할 수 있는 방법을 허용한 사용자 정의 가능한 XML 파일 형식은?

StackOverflow https://stackoverflow.com/questions/800074

  •  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 변환을 생성하는 상용 제품입니다.

시험판을 보고이 복잡한 문제를 해결하는 방법을보고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top