【问题标题】:Reading XML in WinRT在 WinRT 中读取 XML
【发布时间】:2015-03-28 08:33:06
【问题描述】:

我知道一个 XML 文件的网络链接,并且我正在我的应用程序中使用它。

它的根元素是feed,它有几个称为entry 的子元素。每个entry 都有一个元素summary,它由文本和几个子标签组成。例如,

<entry>
    <title type="text">money giving</title>
        <author>
        <name>BMA</name>
        </author>
    <summary type="text">
        <short-description>we give you money</short-description>
        <tab id="0" header="Header &amp; d">
        This is Line 1
        This is Line 2
        This is Line 3
        </tab>
        <tab id="1" header="abc">
        Only one line here
        </tab>
    </summary>
  </entry>

我想获取summary 中的完整文本,包括子标签short-descriptiontags。我试过使用这段代码:

XmlDocument xmlDoc = await XmlDocument.LoadFromUriAsync(new Uri("http://bigmanani.com/Kiosk-RSS_updated.xml"));
XDocument xDoc = XDocument.Parse(xmlDoc.GetXml());
XElement root = xDoc.Root;
XNamespace ad = "http://www.w3.org/2005/Atom";
IEnumerable<string> title = from abc in root.Descendants(ad+"summary") select (string )abc;

foreach(string one in title)
    DebugMessage(one);

问题是我只得到summary 元素的文本部分,而子元素short-descriptiontab 被完全忽略。我怎样才能获得完整的文本?

【问题讨论】:

  • 那么你看到了什么输出?我期望看到“我们给你钱这是第 1 行这是第 2 行这是第 3 行这里只有一行”——这与我刚刚执行的测试一致。 . 如果您希望看到子元素名称和属性,则不应转换为 string
  • 这是输出,但我也希望包含子标签,所以输出应该是“we give you money”,即@中的完整文本987654334@
  • 正确,所以不要转换为string。但请记住,就 XML 而言,这不是“完整的文本”——它是文本节点、元素节点、属性等的混合体。如果您将 XML 视为字符串,它就是文本,但最好将其视为一棵节点树。

标签: c# xml xaml windows-store-apps winrt-xaml


【解决方案1】:

听起来您只是不希望转换为字符串,即documented as:

如果 XElement 有子元素,则返回所有元素文本和后代文本的串联字符串值。

你可能想要ToString()

返回此节点的缩进 XML。

所以:

var title = root.Descendants(ad + "summary").Select(x => x.ToString());

(对于简单的投影使用查询表达式没有任何好处 - 调用扩展方法更简单。)

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2011-04-24
    • 2022-01-01
    相关资源
    最近更新 更多