1

私のXMLを以下に示します。

<UrlRoutes>
  <ActivityPR>
     <Source>activity/editactivity</Source>
     <DestinationController>Activity</DestinationController>
     <DestinationAction>Editactivity</DestinationAction>  
  </ActivityPR>
  <UserSettings>
     <Source>settings/subscriptions</Source>
     <DestinationController>UserSettings</DestinationController>
     <DestinationAction>GetUserPreferenceSettings</DestinationAction>
  </UserSettings>
</UrlRoutes>

Sourcevar say に要素値がありますsourceX。元

SourceX = "settings/subscriptions" 

また

SourceX = "activity/editactivity"

以下のコードを使用して親ノードを取得しようとしています。何か問題がある場合はお知らせください

XmlElement xmlNode = xmlDoc.GetElementById(SourceX);
XmlNode parent = xmlNode.ParentNode;

ここで、親ノード ( ActivityPRor などUsersettings) との組み合わせについて、対応するandSourceを見つける必要があります。DestinationControllerDestinationAction

それ、どうやったら出来るの?コードの残りの部分はその形式であるため、LINQ ではなく従来の XML を優先します。

if(node!=null)
        {
            XmlElement routeElement = (XmlElement)node;


            strController = routeElement.GetElementsByTagName("DestinationController")[0].InnerText.ToString();
            strAction = routeElement.GetElementsByTagName("DestinationAction")[0].InnerText.ToString();


        }
4

1 に答える 1

2

XMLをすでにロードしていると思いますXmlDocument-正しいですか?

その場合、次のようなものを使用できるはずです。

string xpath = string.Format("/UrlRoutes/*[Source='{0}']", sourceX);
XmlNode node = xmlDoc.SelectSingleNode(xpath);

if(node != null)
{
    // use the node to do whatever you need to do
}

xpath式は基本的に、指定された文字列を値として/UrlRoutes含む要素を含むノードを選択します。<Source>つまり、の値は<Source>一意である必要があります。

更新:ノード内のみを検索することがわかっている場合<UserSettings>は、XPath式をより選択的にすることができます。

string parentNode = "UserSettings";
string sourceX = "settings/subscriptions";

string xpath = string.Format("/UrlRoutes/{0}[Source='{1}']", parentNode, sourceX);

しかし、このより選択的なXPathを使用すると、例にある場合はノードを見つけることができません(ノード内にないため)sourceX = "activity/editactivity"<UserSettings>

更新#2:おそらくこのコードを使用してノード内の要素を取得します:

if(node != null)
{
   string dc = node.SelectSingleNode("DestinationController").InnerXml;
   string da = node.SelectSingleNode("DestinationAction").InnerXml;
}

そうすれば、XmlElement最初に変換する必要はありません。

于 2011-12-10T11:35:59.600 に答える