【问题标题】:How to create optional XML tag with attribute inside XML forest如何在 XML 森林中创建具有属性的可选 XML 标记
【发布时间】:2017-06-18 10:00:39
【问题描述】:

我在 Oracle 中创建 XML 时遇到问题。

我设法创建了如下所示的 XML 结构:

<A>
   <B attr1="1">
      10
   </B>
</A>

当 B 的值为 NULL 时,它应该返回 null。这可以通过这样一段代码来完成:

SELECT
    XMLForest(
        CASE 
            WHEN t.V IS NOT NULL
            THEN
                XMLElement(
                    "B",
                    XMLAttributes(
                        t.A1 as attr1
                    ),
                    t.V
                )
        END as A
    ) as testa
FROM
(
    SELECT
        10 as V,
        1 as A1
    FROM
        dual
) t
;

但我想不出任何会产生这样的结构:

<A>
   <B attr1="1">
      10
   </B>
   <C>
      2
   </C>
</A>

如果 B 和 C 的值都是 NULL,则应该返回 NULL。而实际上 A 元素是其他 XMLForest 中的子元素,因此不能将其封装在大 CASE 中。

希望能得到一些帮助...

【问题讨论】:

    标签: xml oracle oracle11g


    【解决方案1】:

    我设法使用XMLConcat 函数找到了解决方案。它看起来像这样:

    SELECT
        XMLForest(
            CASE 
                WHEN t.V IS NOT NULL OR t.C IS NOT NULL
                THEN XMLConcat(
                    XMLElement(
                        "B",
                        XMLAttributes(
                            t.A1 as attr1
                        ),
                        t.V
                    ),
                    XMLElement(
                        "C",
                        t.C
                    )                                
                )
            END as A
        ) as testa
    FROM
    (
        SELECT
            10 as V,
            1 as A1,
            NULL as C
        FROM
            dual
    ) t
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多