1

この xml ドキュメントの saml:AttributeValue 要素に値を追加しようとしています。

<saml:AttributeStatement  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<saml:Attribute Name="FNAME">
  <saml:AttributeValue></saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="LNAME">
  <saml:AttributeValue></saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="Gender">
  <saml:AttributeValue></saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="UniqueID">
  <saml:AttributeValue></saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="DateOfBirth">
  <saml:AttributeValue></saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="ClientID">
  <saml:AttributeValue></saml:AttributeValue>
</saml:Attribute>

この c# コードを使用すると、次のようになります。

//get the AttributeStatement node
    XmlNode attrs = assertion.SelectSingleNode("//saml:AttributeStatement", ns1);
//get the Attribute nodes within the AttributeStatement node
            XmlNodeList attr = attrs.SelectNodes("//saml:Attribute", ns1);

//foreach node in the Attribute node list get the AttributeValue node and add an innerText value
            foreach (XmlNode xn in attr)
            {
                XmlNode attrValue = xn.SelectSingleNode("//saml:AttributeValue", ns1);
                switch (xn.Attributes["Name"].Value)
                {
                    case "FNAME":
                        attrValue.InnerText = UserInfo.FirstName;
                        break;
                    case "LNAME":
                        attrValue.InnerText = UserInfo.LastName;
                        break;
                    case "Gender":
                        attrValue.InnerText = UserInfo.Email;
                        break;
                    case "UniqueID":
                        attrValue.InnerText = UserInfo.UserID.ToString();
                        break;
                    case "DateOfBirth":
                        attrValue.InnerText = UserInfo.UserID.ToString();
                        break;
                    case "ClientID":
                        attrValue.InnerText = UserInfo.UserID.ToString();
                        break;
                    default:
                        attrValue.InnerText = "No attribute listed";
                        break;
                }
//output each AttributeValue innerText.
                lblTest.Text += attrValue.InnerText + " ";

            }

lblTest は、6 つの要素すべてに正しい値を使用して期待どおりに表示されていますが、ドキュメントには値がまったく表示されていません。これは、ループしてこれらの値をノードに追加する正しい方法ですか?

4

1 に答える 1