C# 如何在C语言中编辑xml文件
我只希望基于其值创建一个FamilyCategory标记,如上所述为“窗帘嵌板” 因此,输出将是C# 如何在C语言中编辑xml文件,c#,xml,C#,Xml,我只希望基于其值创建一个FamilyCategory标记,如上所述为“窗帘嵌板” 因此,输出将是 <Family_Inventory> <FamilyCategory>Curtain Panels <FamilyName>System Panel <FamilySymbol>Glazed</FamilySymbol> <FamilySymbol>Wall</FamilySym
<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>
请告诉我怎么做
提前谢谢
当做
Nitin您应该阅读和及其相关类的文档。关于如何在网上使用它们,也有很多例子
是对XML与C的介绍。我想到的第一件事是使用linq获取整个文档。。。然后创建两个类
<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>
解析完整个文档后,只需按familyCategory对它们进行排序。。然后你只需浏览一下列表。创建FamilyCategory的新实例并将所有FamilyNames添加到其列表中。。。为每个新类别创建一个新类。。。在此之后,您只需将它们全部添加回去,如所述我没有对此进行测试,但我认为已经接近了。这是一种非常手动的方法,可能有一种更灵活的方法,但它只是手动将类别分组到一个名为groupedCategoryDocument的新xdocument中
class FamilyCategory
{
string name;
List<FamilyName> familyNames;
}
class FamilyName
{
string name;
List<string> familySymbol;
}
在第三次预览中,我认为您试图生成的XML太复杂了,我认为这在生成和使用方面都是最简单的
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);
}
一种可能性是使用XSLT和按键分组。在这种情况下,对类别和名称使用混合内容会使问题变得复杂;它使关键结构不明显: 规范化空间。/node[1]假定FamilyCategory的第一个子节点是包含类别名称的文本节点,;它是进一步修剪的w.r.t.空白
<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>
关于它的工作原理,可以在这里找到一个很好的解释:这个问题可能会对您有所帮助
<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>