C# 解析bmml文件

C# 解析bmml文件,c#,C#,这件事我已经做了几天了,我想不出来。我不熟悉XML和解析,但我能够从网站检索bmml数据,并且我希望能够从bmml文件中提取图像文件名。我尝试使用XPath,但似乎不起作用 bmml:bmml xmlns="http://www.X.com/2002/bmml" xmlns:bmml="http://www.X.com/2002/bmml" xmlns:cg="http://www.X.com/2002/cg" xmlns:ctrl="http://www.X.com/2002/control"

这件事我已经做了几天了,我想不出来。我不熟悉XML和解析,但我能够从网站检索bmml数据,并且我希望能够从bmml文件中提取图像文件名。我尝试使用XPath,但似乎不起作用

bmml:bmml xmlns="http://www.X.com/2002/bmml" xmlns:bmml="http://www.X.com/2002/bmml" xmlns:cg="http://www.X.com/2002/cg" xmlns:ctrl="http://www.X.com/2002/control" xmlns:geo="http://www.X.com/2002/geometry" xmlns:res="http://www.X.com/2002/resource" xmlns:lyr="http://www.X.com/2002/lyric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <bmml:context name="ctx1">
- <bmml:devices>
  <bmml:device xsi:type="cg:character-generator" name="dev1" /> 
  </bmml:devices>
- <bmml:resources resourceCount="100" totalCount="492">
- <bmml:resource name="image0" moniker="ABC Australia Logo" context="NEWSRED" uuid="FD076559-97F1-4B7A-BD99-864E0A99A7D6" xsi:type="res:image" format="tga" width="0" height="0">
  <bmml:title>ABC Australia Logo.tga</bmml:title> 
  <bmml:description /> 
  <bmml:keywords /> 
  <bmml:asset-class>4</bmml:asset-class> 
  <bmml:author>/X</bmml:author> 
  <bmml:version /> 
  <bmml:subject /> 
  <bmml:filename>..\ABC Australia Logo.tga</bmml:filename> 
  <bmml:filesize>8294418</bmml:filesize> 
  <bmml:url>NEWSRED/images/FD076559-97F1-4B7A-BD99-864E0A99A7D6.tga</bmml:url> 
  <bmml:alpha>true</bmml:alpha> 
  <bmml:created>1274893542000</bmml:created> 
  <bmml:modified>1274893542000</bmml:modified> 
  <bmml:accessed>1277933686000</bmml:accessed> 
- <bmml:proxy name="proxy0" class="thumbnail" xsi:type="res:image" height="0" width="0">
  **<bmml:url>NEWSRED/images/FD076559-97F1-4B7A-BD99-864E0A99A7D6/thumbnail.jpg</bmml:url>** 
  </bmml:proxy>
- <bmml:proxy name="proxy1" class="asset" xsi:type="res:image" height="0" width="0">
  <bmml:url>NEWSRED/images/FD076559-97F1-4B7A-BD99-864E0A99A7D6/asset.jpg</bmml:url> 
  </bmml:proxy>
  </bmml:resource>
bmml:bmml-xmlns=”http://www.X.com/2002/bmml“xmlns:bmml=”http://www.X.com/2002/bmml“xmlns:cg=”http://www.X.com/2002/cg“xmlns:ctrl=”http://www.X.com/2002/control“xmlns:geo=”http://www.X.com/2002/geometry“xmlns:res=”http://www.X.com/2002/resource“xmlns:lyr=”http://www.X.com/2002/lyric“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance">
- 
- 
- 
- 
ABC澳大利亚Logo.tga
4.
/X
..\ABC Australia Logo.tga
8294418
新闻红/图片/FD076559-97F1-4B7A-BD99-864E0A99A7D6.tga
真的
1274893542000
1274893542000
1277933686000
- 
**新闻红/images/FD076559-97F1-4B7A-BD99-864E0A99A7D6/thumbnail.jpg**
- 
NEWSRED/images/FD076559-97F1-4B7A-BD99-864E0A99A7D6/asset.jpg

下面是一个使用扩展方法并检索文档中所有
bmml:url
值的示例:

using System;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;

class Program
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        var nsmgr = new XmlNamespaceManager(new NameTable());
        nsmgr.AddNamespace("bmml", "http://www.X.com/2002/bmml");
        var urls = doc.XPathSelectElements("//bmml:url", nsmgr);
        foreach (var url in urls)
        {
            Console.WriteLine(url.Value);
        }
    }
}
您将注意到使用了允许正确执行
XPath
查询的


更新:

扩展方法的使用似乎不像我最初想象的那么明显。需要确保的事项:

  • 您的项目的目标是.NET 3.5或更高版本
  • 您已经在项目中引用了
    System.Xml.Linq.dll
    程序集
  • 您已经使用System.Xml.XPath添加了
    ,以便将

  • 不确定xml数据是否格式正确(希望如此)。但是,如果所有其他操作都失败,请使用字符串读取器打开并用xml替换bmml:bmml。我不确定这是否可行,我可能有点离谱……我确实相信Darin有一个很好的解决方案,尽管使用linq和.NET3.5的要求可能不适合您


    :)~祝你好运。

    为了让我们有一个讨论的基础,你忘了发布三件事:
    bmml
    文件的一个例子,你正试图提取的文件的确切部分,以及你迄今为止尝试过的内容(确切的代码,我的意思是,不仅仅是说你尝试了
    XPath
    )。现在我想你可以添加第四件事:一条最终的错误消息或你从代码中得到的错误结果,而不是说
    它似乎不起作用
    。我试着在线学习了大量XPath教程,但没有一个能够正确解析bmml。@Katianie,你的评论并没有让我们更接近于帮助你。请参阅我的第一条评论以了解原因。我正在尝试获取之间的数据,而您发布的内容不是有效的XML文件。它包含
    -
    和未关闭的标记。当你说XDocument时,你会遇到XmlDocument或XPathDocument。我也找不到XPathSelectElements。不,XDocument的意思是,嗯…,
    XDocument
    ()。它并不意味着
    XmlDocument
    XPathDocument
    。顺便说一句,这与那些课程无关。至于
    XPathSelectElements
    方法,它是
    System.Xml.XPath
    命名空间中定义的扩展方法,位于
    System.Xml.Linq程序集
    中。阅读文档(我提供的链接),正确使用和参考正确的组件。