【问题标题】:sql server read xml without inner tagssql server读取没有内部标签的xml
【发布时间】:2016-12-06 10:35:42
【问题描述】:

我正在阅读一个 xml,但是当我想在没有其内部(子)标签的情况下阅读它时遇到了问题。 例如:

DECLARE @XMLToParse  XML

SET @XMLToParse =   '<Animals>
                       <LandAnimals>
                        <Animal>Baboon</Animal>
                        <Animal>Yak
                            <d>asd</d>
                        </Animal>
                        <Animal>Zebra</Animal>
                       </LandAnimals>
                    </Animals>'

SELECT  xmlData.A.value('.', 'VARCHAR(100)') AS Animal
FROM    @XMLToParse.nodes('Animals/LandAnimals/Animal') xmlData(A)

此查询提取第二条记录“Yak asd”,但我只需要“Yak”。 我该如何解决?

谢谢!

【问题讨论】:

    标签: sql sql-server xml tags


    【解决方案1】:

    更改您对.value() 的呼叫以获取text()

    SELECT  xmlData.A.value('(./text())[1]', 'VARCHAR(100)') AS Animal
    FROM    @XMLToParse.nodes('Animals/LandAnimals/Animal') xmlData(A)
    

    【讨论】:

    • 非常感谢!那么,还有其他选项像'text()'吗?
    • @user3061212 还有什么其他选择?您可能会使用奇怪的解决方法,但为什么呢?
    • @user3061212 /text() 是元素的真实文本内容。用.value() 读取. 将读取上下文节点下面 的整个树。如果这是您的意图,您可能会阅读有关.value('data(...)') 的信息。但在你的情况下,你只是对较低的元素不感兴趣......
    【解决方案2】:

    指定text()

    SELECT  xmlData.A.value('./text()[1]', 'VARCHAR(100)') AS Animal
    FROM    @XMLToParse.nodes('Animals/LandAnimals/Animal') xmlData(A)
    

    【讨论】:

      猜你喜欢
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多