2012-01-11 43 views
1

我試圖在.cxml文件上做非常簡單的操作。如您所知,它基本上是一個.xml文件。這是我創建測試應用程序的示例文件:Pivotviewer的.cxml解析

<?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( 「項目」),結果

的答案是:

空 「枚舉沒有結果」 的字符串

任何暗示什麼可以是錯誤?我還添加了一個快速查看方面的後代,方面等,但枚舉中沒有結果。這顯然不會發生在我用於測試的通用xml文件中。這是我的問題.cxml

回答

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中刪除默認的命名空間的代碼實際上按原樣運行,但這不是該練習的目的。

0

請參閱源代碼http://github.com/Zoomicon/Metadata.CXML下的Metadata.CXML項目,以便對基於LINQ的CXML文件進行解析。

另見ClipFlair.Metadata項目在http://github.com/Zoomicon/ClipFlair.Metadata用於分析一個人的CXML定製方面也

順便說一句,在http://ClipFlair.codeplex.com可以檢出瞭如何編寫ASP.net基於web的表單編輯元數據片段的ClipFlair.Gallery項目( CXML文件的一部分)並將它們合併成一個文件(然後您可以定期將其轉換爲帶有來自http://pauthor.codeplex.com的PAuthor工具的DeepZoom CXML)。

如果有人有興趣做築巢CXML集合(層次)見 http://github.com/Zoomicon/Trafilm.Metadatahttp://github.com/Zoomicon/Trafilm.Gallery