は私がそう考えると、16桁の番号の親ノードを検索し、そのセクション全体を返すために正規表現を使用したいが、どのように把握することはできません。正規表現を動作させるにはどうすればよいですか?
:<Details>
<CreditCard cardnum="123456789" ccv="123" exp="0212" cardType="1" name="joe" />
</Details>
は私が返すようにしたいです
<CreditCard cardnum="123456789" ccv="123" exp="0212" cardType="1" name="joe" />
私はxmlを解析し、数字であるすべての属性を取得してそれを削除するつもりです。
私は.*(\d{13,16}).*
を試しましたが、これはすべての文字を取得します。一度
、私は:私はint.TryParseを削除:
foreach(var x in elementsWithPossibleCCNumbers)
{
//If attribute is number, replace value with empty string
}
注:
XElement element = XElement.Parse(xml); // XDocument.Load(xmlFile).Root
IEnumerable<XElement> elementsWithPossibleCCNumbers =
element.Descendants()
.Where(d => d.Attributes()
.Where(a => a.Value.Length == 16)
.Count() == 1);
私はどのように例えばelementsWithPossibleCCNumbersの各属性をループに把握することはできません今。
私はこれを行うことを決めた。
IEnumerable<XElement> elementsWithPossibleCCNumbers =
element.Descendants()
.Where(d => d.Attributes()
.Where(a => a.Value.Length >= 13 && a.Value.Length <= 16)
.Count() == 1).Select(x=>x);
foreach(var x in elementsWithPossibleCCNumbers)
{
foreach(var a in x.Attributes())
{
xml = xml.Replace(a.Value, new String('*',12));
}
}
私が16桁の属性を持つ第二の要素を持っている場合は、それが唯一の属性値の一部を置き換えます。
を伝えることができない、のろいです、彼らが適切に働く前に魔法を使う。 – Yuck
なぜXMLを逆シリアル化しないのですか?または、LINQ to XMLを使用して、必要なXML要素を正確に取り戻すことができますか? –
デシリアライズしたくない場合は、XPathを使用することもできます。 – seanzi