Ich habe eine C# Funktion wie diese in meinem Stylesheet:XSLT + C#: Zurückgeben einer flachen Menge von Knoten ohne umgebenden Helfer <root> Element wegen XmlDocuments wohlgeformter Einschränkung?
<xsl:stylesheet ...
xmlns:utils="urn:local">
<msxsl:script language="CSharp" implements-prefix="utils">
<![CDATA[
public XmlDocument dateSplit(string str)
{
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement(string.Empty, "root", string.Empty);
Regex rgx = new Regex("(?:(\\d{1,2})\\.(\\d{1,2})\\.)?(\\d{4})?");
Match match = rgx.Match(str);
XmlElement yearElem = doc.CreateElement(string.Empty, "year", string.Empty);
XmlElement monthElem = doc.CreateElement(string.Empty, "month", string.Empty);
XmlElement dayElem = doc.CreateElement(string.Empty, "day", string.Empty);
if (match.Success) {
string dayVal = match.Groups[1].Value;
string monthVal = match.Groups[2].Value;
string yearVal = match.Groups[3].Value;
if (dayVal != "" && monthVal != "" && yearVal != "") {
XmlText dayText = doc.CreateTextNode(dayVal.PadLeft(2, '0'));
XmlText monthText = doc.CreateTextNode(monthVal.PadLeft(2, '0'));
XmlText yearText = doc.CreateTextNode(yearVal);
dayElem.AppendChild(dayText);
monthElem.AppendChild(monthText);
yearElem.AppendChild(yearText);
} else if (yearVal != "") {
XmlText yearText = doc.CreateTextNode(yearVal);
yearElem.AppendChild(yearText);
}
}
root.AppendChild(yearElem);
root.AppendChild(monthElem);
root.AppendChild(dayElem);
doc.AppendChild(root);
return doc;
}
]]>
</msxsl:script>
It "1960" in <year>1960</year>
"2016.04.07" in <year>2016</year><month>07</month><day>04</day>
usw.
Um verwandelt sich die Elemente year
hinzufügen möchten, month
und day
flach in meine XML-Ausgabe ...
<someOtherStuff>...</someOtherStuff>
<year>2016</year>
<month>07</month>
<day>04</day>
<moreStuff>...</moreStuff>
... ich habe das verwenden, Funktion wie folgt:
<xsl:copy-of select="utils:dateSplit(myInput)/root/*"/>
I die Hilfs <root>
Elemente in der dateSplit()
Funktion nicht vermeiden kann, weil XmlDocument
wohlgeformt (nur auf der obersten Ebene ein einzelnes Element) sein. Es ist nicht möglich, mehrere Elemente an den Stamm anzuhängen.
Gibt es eine Alternative, so etwas wie ein ResultTreeFragment, die nicht Wohlgeformtheits-, um das künstliche und temporäres <root>
Element zu vermeiden, ist sicherzustellen?
Vielen Dank für der Zeiger in die richtige Richtung, löste es mein Problem! Ich habe Ihre Antwort bearbeitet, um meinen bearbeiteten Code mithilfe des Fragments hinzuzufügen. – CoDEmanX