سؤال

مشكلتي هي ما يلي: كيف يمكنني إزالة نود childnodes المحددة من xmlnode بشكل متكرر؟ يبدو ملف XML الخاص بي ...

..<element type="TextBox" id="xslFilePath">
                <parameters>
                    <parameter id="description">
                        <value><![CDATA[Pfad zur XSL]]></value>
                        <value lang="en"><![CDATA[XSL-file's path]]></value>
                    </parameter>
                    <parameter id="tooltip">
                        <value><![CDATA[Pfad zur XSL]]></value>
                        <value lang="en"><![CDATA[XSL-file's path]]></value>
                    </parameter>
                </parameters>
                <values>
                    <value><![CDATA[/include/extensions/languageReferences/xsl/default.xsl]]></value>
                </values>
            </element>
            <element type="DropDownList" id="imageOrientation">
                <parameters>
                    <parameter id="description">
                        <value><![CDATA[Anordnung]]></value>
                        <value lang="en"><![CDATA[Orientation]]></value>
                    </parameter>
                    <parameter id="tooltip">
                        <value><![CDATA[Anordnung]]></value>
                        <value lang="en"><![CDATA[Orientation]]></value>
                    </parameter>
                </parameters>
                <items>
                    <item id="" selected="true">
                        <parameters>
                            <parameter id="value">
                                <value><![CDATA[vertical]]></value>
                            </parameter>
                            <parameter id="description">
                                <value><![CDATA[senkrecht]]></value>
                                <value lang="en"><![CDATA[vertical]]></value>
                            </parameter>
                        </parameters>
                    </item>
                    <item id="" selected="false">
                        <parameters>
                            <parameter id="value">
                                <value><![CDATA[horizontal]]></value>
                            </parameter>
                            <parameter id="description">
                                <value><![CDATA[waagerecht]]></value>
                                <value lang="en"><![CDATA[horizontal]]></value>
                            </parameter>
                        </parameters>
                    </item>
                </items>
                <values>
                    <value><![CDATA[horizontal]]></value>
                </values>
            </element>...

أرغب في إزالة جميع العقد (نوع القيمة) حيث يكون ParentNode نوعًا من المعلمة مع ID = "الوصف" ولكن ليس من القيمة كأطفال من القيم أو المعلمة مع ID = "القيمة" في XSLT أود أن أقول على سبيل المثال: //value[parent::parameter[@id='description'] and @lang='en']المشكلة هي: لدي رمز اللغة: على سبيل المثال "DE" والآن أود إزالة جميع عقد قيمة الأخوة إذا كانت قيمة مع Lang = "DE" موجودة وإزالة جميع العقد الشقيقة باستثناء القيمة دون أي lang-attribut = "DE" غير موجود (كاحتباس) ، آمل ، يمكنك مساعدتي في كتابة رمز C# لاستبدال جميع القيم غير المرغوب فيها بشكل متكرر.

هل كانت مفيدة؟

المحلول

نأمل أن هذا هو ما تبحث عنه.

إذا قمت بتحميلك xml في ملف XmlDocument يمكنك استخدام طريقة مثل هذه طريقة لإزالة العقد التي تطابق XPath.

public void RemoveElements(XmlDocument document, string xpathForElementsToRemove)
{
    if (document == null || document.DocumentElement == null) return;
    var xmlNodeList = document.DocumentElement.SelectNodes(xpathForElementsToRemove);
    if (xmlNodeList == null || xmlNodeList.Count == 0) return;
    for (var n = xmlNodeList.Count - 1; n >= 0; n--)
    {
        var xmlNode = xmlNodeList[n];
        if (xmlNode.ParentNode == null) continue;
        xmlNode.ParentNode.RemoveChild(xmlNode);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top