【问题标题】:Sql query on xml datasql查询xml数据
【发布时间】:2018-05-21 09:26:16
【问题描述】:

我必须从只有 xml 数据的字段中获取信息,例如(“内容”字段):

我不知道如何使用 XQuery 或其他 Xpath,也没有找到任何初学者教程。 我在 xml 中找到了一个属性名称(名为“FormId”,其值是另一个表中的 Id),可用于我今天开发的 Web 应用程序。

如何进行查询以获取此 ID 并在我的 ASP.Net 应用程序 (SqlCommand) 上使用它。

我希望被理解,因为我有点法国人,在那个技术问题上需要帮助:'(

完整代码在这里:

Example of a complete xml data

【问题讨论】:

  • 我们需要更多的东西来处理这只是一张图片。您能否发布一些 DDL 和消耗品样本数据?您可以在那里找到大量关于如何发布 SQL 问题的指南,例如 this one
  • 您提供的 XML 不完整。如果您尝试将CAST/CONVERT 转换为 SQl 服务器中的 XML,我们会收到错误 Msg 9400, Level 16, State 1, Line 1 XML parsing: line 9, character 8254, unexpected end of input。我们需要可以使用的数据。因此 “consumable” 样本数据和 DDL。
  • @Larnu :我的问题已更新。抱歉,我是 StackOverFlow 的新手。
  • XML 仍然不完整。我们还需要我们可以使用的格式(因此使用 DDL 和 INSERT 语句)。
  • @Larnu :我制作了一个谷歌文档并将完整的 xml 数据复制/粘贴到其中。

标签: sql asp.net sql-server xml


【解决方案1】:

将完整的 XML 作为转义文本放入属性值中是一个非常糟糕的设计...如果这在您的控制之下,您应该更改它!

尽管如此,这是可以做到的:

首先,您必须阅读“ObjectContent”属性并将其转换为 XML。在下一步中,您需要调用 CROSS APPL ... .nodes(),因为所需的值似乎已嵌入多次。

DECLARE @x XML=N'Place on of your XMLs here':
WITH PropertyObjectContent(AsXml) AS
(
    SELECT CAST(@x.value(N'(/Root/StorageObject/Properties/Property[@Name="ObjectContent"]/@Value)[1]',N'nvarchar(max)') AS XML)
)
SELECT AllFormIds.val.value(N'@Value',N'uniqueidentifier') AS FormId
FROM PropertyObjectContent
CROSS APPLY PropertyObjectContent.AsXml.nodes(N'//Property[@Name="FormId"]') AS AllFormIds(val);

如果您对整个表格都需要此代码,我希望您可以根据实际需要修改此代码...

【讨论】:

  • 非常感谢@Shnugo 的回答。不幸的是,它不在我的控制之下,我无法修改数据库。我有一个问题(但我认为,这不是正确的话题),您认为没有 SQL 查询但使用 ASP.Net 代码隐藏可以工作吗?我必须在 Web 应用程序上工作,以便使用自己的表单查看每个模板。序列化 xml 字段?可能吗?
  • @ClémentPlaudel,当然,可以使用 .Net 代码读取 XML 的内容。阅读System.Xml.XmlDocumentSelectSingleNode() 方法(以读取ObjectContent)和 - 将其转换为新的XmlDocument - SelectNodes() 以获取所有FormId 值。一个提示:请不要提出跟进问题。在 SO 上有一个问题 - 一个问题。如果这个问题(Sql query on xml)得到解决,请通过接受最有帮助的答案来关闭它并开始一个新问题。副作用:更具吸引力
  • 好的,很抱歉。感谢您提供这些信息。
  • @ClémentPradel 没问题,你是新来的……编码快乐! (这个问题解决了吗?)
  • 我是编码初学者,所以“Google 是我的朋友”。我有一个关于如何将 xml 数据连接到我的应用程序的问题。我使用 sqlconnection 进行了测试,但 xmlDocument.Load 使用 url...我发布了一个新问题。
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 2020-02-06
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多