【问题标题】:Guid attribute returns wrong value when try to get it via Linq to XML尝试通过 Linq to XML 获取 Guid 属性时返回错误值
【发布时间】:2013-08-16 03:00:42
【问题描述】:

这是我提取元素的方式,但是当我尝试获取属性值时,我得到的只是一些数字而不是 Guid 字符串:

... = from c in xdoc.Element(mdpr + "A")
                    .Elements(mdpr + "B")
                    .Elements(mdpr + "C")
      let data= c                                   
      select new MyData
      {
          state = (string)data.Element(mdpr + "state"),
          TEMP = (string)data.Attribute("guidNumber") // TEMP is string
...

这是 XML:

...
<mdpr:B>
    <mdpr:C guidNumber="4t56u27b-b784-4303-b710-95966b6e68ba" >
      <mdpr:state>17</mdpr:state>
...



更新

如果 XML 有“{”,那么它可以工作:

 <mdpr:C guidNumber="4t56u27b-b784-4303-b710-95966b6e68ba" > // doesn't work
 <mdpr:C guidNumber="{4t56u27b-b784-4303-b710-95966b6e68ba}" > // work

但是如何获得这个值呢?

【问题讨论】:

  • 您知道这是一个无效的 GUID 字符串吗?它包含一个t,它不是十六进制字符
  • 不,我已经更改了这里的问题 Guid 是有效的,但 '{' 导致获取它的值时出现问题。

标签: c# xml xml-parsing linq-to-xml


【解决方案1】:

你想要属性的value

data.Attribute("guidNumber").Value

【讨论】:

  • 不,这也不会返回 Guid 字符串。我得到的只是一些数字 000005,它在我的 xml 中不存在。
【解决方案2】:

下面这个sn-p可以正常工作:

String xml_string = @"<root xmlns:mdpr=""someUri"">
                          <mdpr:A>
                              <mdpr:B>
                              <mdpr:C guidNumber=""4t56u27b-b784-4303-b710-95966b6e68ba"" >
                                <mdpr:state>17</mdpr:state>
                              </mdpr:C>
                              </mdpr:B>
                          </mdpr:A>
                      </root>";

var q = XElement.Parse(xml_string).Descendants()
          .Where(c => c.Name.LocalName.ToString() == "C").First()
          .Attribute("guidNumber").Value;

Console.WriteLine(q);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 2013-01-10
    • 2013-04-02
    • 2016-06-10
    • 2013-02-22
    相关资源
    最近更新 更多