我正在尝试对.cxml
文件执行非常简单的操作。如您所知,它基本上是.xml
文件。这是我为测试应用程序而创建的示例文件:
<?xml version="1.0" encoding="utf-8"?>
<Collection xmlns:p="http://schemas.microsoft.com/livelabs/pivot/collection/2009" SchemaVersion="1.0" Name="Actresses" xmlns="http://schemas.microsoft.com/collection/metadata/2009">
<FacetCategories>
<FacetCategory Name="Nationality" Type="LongString" p:IsFilterVisible="true" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" />
</FacetCategories>
<!-- Other entries-->
<Items ImgBase="Actresses_files\go144bwo.0ao.xml" HrefBase="http://www.imdb.com/name/">
<Item Id="2" Img="#2" Name="Anna Karina" Href="nm0439344/">
<Description> She is a nice girl</Description>
<Facets>
<Facet Name="Nationality">
<LongString Value="Danish" />
</Facet>
</Facets>
</Item>
</Items>
<!-- Other entries-->
</Collection>
我无法获得任何正常运行的简单代码:
XDocument document = XDocument.Parse(e.Result);
foreach (XElement x in document.Descendants("Item"))
{
...
}
对通用xml
的测试正在进行中。 cxml
文件已正确加载到文档中。
看着表情:
document.Descendants(“Item”),结果
答案是:
清空“枚举没有产生结果”字符串
任何可能出现错误的提示?我还添加了一个快速查看以获得Facet,Facets等的后代,但枚举中没有结果。对于我用于测试的通用xml
文件,这显然不会发生。这与我.cxml
的问题有关。
答案 0 :(得分:0)
基本上,您的XML使用xmlns="http://schemas.microsoft.com/collection/metadata/2009"
属性定义默认命名空间:
这意味着您需要完全限定您的后代查询,例如:
XDocument document = XDocument.Parse(e.Result);
foreach (XElement x in document.Descendants("{http://schemas.microsoft.com/collection/metadata/2009}Item"))
{
...
}
如果从XML中删除默认命名空间,则代码实际上按原样运行,但这不是练习的目的。
答案 1 :(得分:0)
请参阅http://github.com/Zoomicon/Metadata.CXML源代码下的Metadata.CXML项目,以获取基于LINQ的CXML文件解析。
另见http://github.com/Zoomicon/ClipFlair.Metadata的ClipFlair.Metadata项目,用于解析一个CXML自定义方面
BTW,在http://ClipFlair.codeplex.com可以查看ClipFlair.Gallery项目,了解如何编写ASP.net基于Web的表单来编辑元数据片段(部分CXML文件)并将它们合并在一起(你是然后使用http://pauthor.codeplex.com中的PAuthor工具定期转换为DeepZoom CXML。如果有人对嵌入(层次结构)CXML集合感兴趣,请参阅 http://github.com/Zoomicon/Trafilm.Metadata 和 http://github.com/Zoomicon/Trafilm.Gallery