По моему самый разумный путь - это приведение хмл-документа к виду, пригодному для десериализации, то есть к такому| Код | <SomeStruct> <Name1>Value1</Name1> <Name2>Value2</Name2> <Name1>Value3</Name3> </SomeStruct>
|
Если повлиять на структуру документа нельзя, а это очень желательно, поскольку называть фактически однотипные узлы(node1, node2 и т. д.) разными именами - в принципе плохая идея, тогда можно выполнить преобразование документа с помощью xslt, после чего таки выполнить десериализацию. XSLT будет иметь примерно следующий вид| Код | <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/>
<xsl:template match="/"> <SomeStruct> <xsl:apply-templates select="main/*"/> </SomeStruct> </xsl:template>
<xsl:template match="main/*"> <xsl:element name="{name}"> <xsl:value-of select="value"/> </xsl:element> </xsl:template> </xsl:stylesheet>
|
Если вариант с десериализацией не подходит, тогда можно обойти все узлы nodeN и добавить пары имя-значения в словарь, после чего обходить все поля структуры и брать их значения из словаря. Поля обойти можно с помощью рефлексии, чтобы не перечислять их поименно в коде. |