[英]how to edit xml file in C#
<Family_Inventory>
<FamilyCategory>Curtain Panels
<FamilyName>System Panel
<FamilySymbol>Glazed</FamilySymbol>
<FamilySymbol>Wall</FamilySymbol>
</FamilyName>
</FamilyCategory>
<FamilyCategory>Curtain Panels
<FamilyName>Rectangular Mullion
<FamilySymbol>2.5" x 5" rectangular</FamilySymbol>
</FamilyName>
</FamilyCategory>
...........
...........// many other family categories
...........
</Family_Inventory>
我想根據其值僅創建一個FamilyCategory標簽,因為上面是“窗簾面板”,因此輸出將是
<Family_Inventory>
<FamilyCategory>Curtain Panels
<FamilyName>System Panel
<FamilySymbol>Glazed</FamilySymbol>
<FamilySymbol>Wall</FamilySymbol>
</FamilyName>
<FamilyName>Rectangular Mullion
<FamilySymbol>2.5" x 5" rectangular</FamilySymbol>
</FamilyName>
</FamilyCategory>
...........
...........// many other family categories
...........
</Family_Inventory>
請告訴我我該怎么做?
提前致謝,尼丁
您應該閱讀XmlDocument和XmlNode及其相關類的文檔。 還有許多如何在線使用它們的示例。
這是使用C#進行XML的介紹。
我想到的第一件事是使用linq來獲取整個文檔...然后只創建兩個類
class FamilyCategory
{
string name;
List<FamilyName> familyNames;
}
class FamilyName
{
string name;
List<string> familySymbol;
}
解析整個文檔后,只需按familyCategory對它們進行排序即可。然后,您只需遍歷列表即可。 創建FamilyCategory的新實例,所有的FamilyNames添加到其列表...對於每一個新Cateogry您創建一個新類... ...之后,你只需要添加他們被描述都回來這里
我尚未對此進行測試,但我認為它已經接近。 這是一種非常手動的方法,可能有一種更輕松的方法,但這只是將類別手動分組到一個名為groupedCategoryDocument的新xdocument中。
var doc = XDocument.Parse(xmlString);
var groupedCategoryDocument = XDocument.Parse("<Family_Inventory />");
foreach(var category in doc.Root.Elements("FamilyCategory"))
{
//create the category for the new document
var groupedCategory = new XElement("FamilyCategory", category.Text);
//get all of the families for this category
foreach(var familyName in category.Elements("FamilyName"))
{
//add to new document
groupedCategory.Add(XElement.Parse(familyName.ToString());
}
// add category to new document
groupedCategoryDocument.Add(groupedCategory);
}
在第三次預覽中,我認為您嘗試生成的XML太復雜了,就生成和使用而言,我認為這將是最簡單的
<Family_Inventory>
<Family category="{category-name}" name="{family-name}" symbol="{symbol-1}"/>
<Family category="{category-name}" name="{family-name}" symbol="{symbol-2}"/>
...
<Family category="{category-name}" name="{family-name}" symbol="{symbol-n}"/>
</Family_Inventory>
一種可能性是使用XSLT並按鍵分組。 在這種情況下,由於將混合內容用於“類別”和“名稱”而變得很復雜; 它使密鑰構造變得不明顯:
normalize-space(./node()[1])
假定FamilyCategory的第一個子節點是一個包含類別名稱的文本節點; 它會進一步修剪白色空間。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:key name="category" match="FamilyCategory" use="normalize-space(./node()[1])" />
<xsl:template match="Family_Inventory">
<xsl:copy>
<xsl:for-each
select="FamilyCategory[count(. | key('category', normalize-space(./node()[1]))[1]) = 1]">
<xsl:copy>
<xsl:value-of select="normalize-space(./node()[1])" />
<xsl:for-each select="key('category', normalize-space(./node()[1]))/FamilyName">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
在這里可以找到有關其工作原理的很好的解釋: http : //www.jenitennison.com/xslt/grouping/muenchian.xml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.