1

最後にプログラミングを試みてからしばらく経ちましたが、これまで XML を扱ったことはありませんでした。XML を表示する内部 Web サイトを持っています

   <Source>
    <AllowsDuplicateFileNames>YES</AllowsDuplicateFileNames> 
    <Description>The main users ....</Description> 
    <ExportSWF>FALSE</ExportSWF> 
    <HasDefaultPublishDir>NO</HasDefaultPublishDir> 
    <Id>28577db1-956c-41f6-b775-a278c39e20a1</Id> 
    <IsAssociated>YES</IsAssociated> 
    <LogoURL>http://servername:8080/logos/9V0.png</LogoURL> 
    <Name>Portal1</Name> 
    <RequiredParameters>
     <RequiredParameter>
      <Id>user_name</Id> 
      <Name>UserID</Name> 
      <PlaceHolder>username</PlaceHolder> 
      <ShowAsDescription>true</ShowAsDescription> 
     </RequiredParameter>
   </RequiredParameters>

子タグの値は必要ありません。複数のポータルが存在する場合があるため、リストを使用する必要があります。Name タグと ID タグ内の値のみが必要です。また、空白の ID タグがある場合は、どちらも保存したくありません。

これに対する私の現在のアプローチは期待どおりに機能していません:

String URLString = "http://servername:8080/roambi/SourceManager";
XmlTextReader reader = new XmlTextReader(URLString);

List<Portal> lPortals = new List<Portal>();
String sPortal = "";
String sId = "";

while (reader.Read())
{
    //Get Portal ID
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "Id")
    {
        reader.Read();
        if (reader.NodeType == XmlNodeType.Text)
        {
            sId = reader.Value;
        }
    }

    //Get Portal Name
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "Name")
    {
        reader.Read();
        if (reader.NodeType == XmlNodeType.Text)
        {
            sPortal = reader.Value;
        }

        //Fill Portal List with Name and ID
        if (sId != "" && sPortal != "")
        {
            lPortals.Add(new Portal
            {
                Portalname = sPortal,
                Portalid = sId
            });
        }
    }
}

foreach (Portal i in lPortals)
{
    Console.WriteLine(i.Portalname + " " + i.Portalid);
}

私の標準クラスを見る

class Portal 
{
    private String portalname;
    private String portalid;

    public String Portalname
    {
        get { return portalname; }
        set { portalname = value; }
    }

    public String Portalid
    {
        get { return portalid; }
        set { portalid = value; }
    }
}

最後にプログラミングしてからしばらく経っていると言いましたが、アドバイスをして、方向性を示してください。私の現在の出力は次のとおりです。

Portal1 28577db1-956c-41f6-b775-a278c39e20a1
UserID user_name

UserID が子ノードにあり、子ノードを表示したくない

4

1 に答える 1

1

XDocumentクラスを使用すると、はるかに簡単になります。

String URLString = "http://servername:8080/roambi/SourceManager";
XmlTextReader reader = new XmlTextReader(URLString);
XDocument doc = XDocument.Load(reader);

// assuming there's some root-node whose children are Source nodes
var portals = doc.Root
    .Elements("Source")
    .Select(source => new Portal
        {
            Portalname = (string) source.Element("Name"),
            Portalid = (string) source.Element("Id")
        })
    .Where(p => p.Portalid != "")
    .ToList();

XML の各<Source>ノードに対して、上記のコードは直接の子ノード (<Name>および) を選択し、適切なインスタンス<Id>を構築します。Portal

于 2013-09-14T18:03:57.190 に答える