1 Câu hỏi: Xử lý nội dung văn bản XML mà không kèm theo thẻ đánh dấu

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi cần chuyển đổi dữ liệu xml bằng chuyển đổi xsl. Tôi có một số nút chứa văn bản và phần tử con.

Tôi không thể bọc văn bản giữa các thành phần con thành các thẻ đánh dấu tách biệt

…
<content>
    some text 1
    <child>child 1</child>
    some text 2
    <child>child 2</child>
    some text 3
    <child>child 3</child>
    some text 4
</content>
…

Đầu ra mong muốn sẽ là:

…
<markup>some text 1</markup>
<child>child 1</child>
<markup>some text 2</markup>
<child>child 2</child>
<markup>some text 3</markup>
<child>child 3</child>
<markup>some text 4</markup>
…

Tôi đã thử như sau:

<xsl:template match="content">
    <xsl:for-each select="./text()">
        <markup>
            <xsl:value-of select="." />
        </markup>
    </xsl:for-each>
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="child">
    …
</xsl:template>

Kết quả bây giờ là một số nội dung trùng lặp:

<markup>some text 1</markup>
<markup>some text 2</markup>
<markup>some text 3</markup>
<markup>some text 4</markup>
some text 1<child>child 1</child>some text 2<child>child 2</child>some text 3<child>child 3</child>some text 4
    
0
  1. Bạn đã thử cái gì? Vui lòng hiển thị mã của bạn và chỉnh sửa câu hỏi để thêm thẻ ngôn ngữ phù hợp.
    2019-05-08 12: 42: 14Z
  2. @ GabrielDevillers tôi đã chỉnh sửa câu hỏi của mình.
    2019-05-08 13: 15: 05Z
1 Câu trả lời                              1                         

Hãy thử một cái gì đó dọc theo dòng:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="content/text()">
    <markup>
        <xsl:value-of select="." />
    </markup>
</xsl:template>

</xsl:stylesheet>
    
0
2019-05-08 12: 36: 13Z
  1. Tôi đã cố gắng kết hợp câu trả lời của bạn với mã của tôi. Tôi gần như ở đó - nhưng bây giờ nhận được một số nội dung trùng lặp. Tôi đã thêm vào kết quả cho câu hỏi của mình ở trên.
    2019-05-08 13: 17: 03Z
  2. Nó không thể hoạt động theo cách bạn đang cố gắng. Khi bạn thực hiện <xsl:apply-templates/>, bạn cũng đang áp dụng các mẫu cho các nút văn bản. Nếu bạn loại trừ chúng, bạn sẽ nhận được tất cả các nút văn bản trước, sau đó là tất cả các yếu tố child.
    2019-05-08 13: 32: 31Z
nguồn đặt đây