我正在尝试将值添加到此 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 个元素的值都正确,但文档根本没有显示任何值。这是循环并将这些值添加到节点的正确方法吗?