当前位置: 首页 > 知识库问答 >
问题:

如何将内部文本和Xml复制到另一个标签中

慕容成文
2023-03-14

我正在开发一个C#应用程序,它可以分离两个Xml文档,合并它们的一些标记内容,并生成第三个Xml文档。我面临的情况是,我需要提取一个标记(包括内部标记)的值,并将其转移到另一个标记。我开始做这样的事情:

var summaryElement = elementExternal.Element("summary");
var summaryValue = (string)summaryElement;
var summaryValueClean = ElementValueClean(summaryValue);

var result = new XElement("para", summaryValueClean)

其中ElementValueClean函数删除了多余的空白。

如果摘要标签的值只包含文本,则此操作令人满意。当摘要标签包含以下子元素时,问题就来了:

<summary>
   Notifies the context that a new link exists between the <paramref name="source" /> and <paramref name="target" /> objects
   and that the link is represented via the source.<paramref name="sourceProperty" /> which is a collection.
   The context adds this link to the set of newly created links to be sent to
   the data service on the next call to SaveChanges().
</summary>

我想制作这样的作品:

<para>
Notifies the context that a new link exists between the <paramref name="source" /> and <paramref name="target" /> objects
and that the link is represented via the source.<paramref name="sourceProperty" /> which is a collection.
The context adds this link to the set of newly created links to be sent to
the data service on the next call to SaveChanges().
</para>

在我的源标记目录中,大约有十几个可能的嵌入标记,我必须将它们的内容合并到输出标记中。所以我想要一个可以推广的C#解。然而,如果Xslt转换足够简单,我可以将其应用于Xml片段以生成Xml片段,这对我也适用。我的Xslt技能因被废弃而降低。

共有1个答案

宋鸿德
2023-03-14

您可以更新ElementValueClear()函数来支持内联节点,并接受一个Element而不是它的字符串值:

foreach (XmlNode n in summaryElement.Nodes()) {
  if (node.NodeType == XmlNodeType.Text) {
      //do text cleanup
  }
  else n
}

重写元素的XSLT非常简单,但我认为C#解决方案仍然更有意义,因为您已经有了一个可用的C#文本清理解决方案。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="summary">
        <para><xsl:apply-templates/></para>
    </xsl:template>

    <xsl:template match="node()|@*" priority="-1" mode="#default">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" mode="#current"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

或者你也可以用XSLT做所有的事情,包括文本清理。目前尚不清楚该函数的作用,但在XSLT中可以这样启动它:

<xsl:template match="text()">
    <xsl:value-of select="normalize-space(.)"/>
</xsl:template>
 类似资料:
  • 如何将一个文本文件复制到另一个文本文件中?我试过这个: 这只是在中留下以下值:。 我做错了什么?

  • 问题内容: 我有一些数据结构,我想将其中一个用作临时结构,将另一个用作非临时结构。 现在的问题当然是实际上只是指向,因此一旦清除,也是如此。 如何在使用Java时保留值? 问题答案: 您可以使用以下技巧: 或使用 您可以在此处获取有关clone()方法的一些信息 但是您应该记住,所有这些方式都会给您 List 的副本,而不是其所有元素。因此,如果您更改复制的列表中的元素之一,则它也将在原始列表中进

  • 我正在用JavaFX和Scene Builder制作一个应用程序。 我有两个控制器:控制器和FontController 我有一个主类,它启动我的程序,并用第一个fontroller(控制器)打开舞台 控制器中有一个标签和一个按钮。当我单击按钮时,将调用一个方法,并显示带有第二个控制器的新窗口(FontController): FontCOntroller中有按钮“OK”和标签: 请告诉我,当我单

  • 问题内容: 我想复制一个画布上的所有内容,然后在客户端将它们全部转移到另一个画布上。我认为我会使用and 方法来实现这一点,但是我遇到了一些问题。 我的解决方案是将其获取并存储在Javascript中的Image对象中,然后使用该方法将其放回原处。 但是,我相信该方法会返回一个带有64位编码标签的标签。这似乎不是一个有效的标签,(我总是可以使用一些RegEx删除它),但是子字符串之后的64位编码字

  • 问题内容: 我在做下面的运动。 创建一个包含四个元素的切片。 创建一个新切片,并将第三个和第四个元素仅复制到其中。 我已经返回了以下程序 我程序的输出是。但我希望newElements切片为[3 4]- 我的程序出了什么问题。 问题答案: 使用内置的复制功能将元素从一个切片复制到另一个切片。 在操场上跑 您可以使用append创建切片并在单个语句中复制元素,但是代码并不像使用copy那样明显。 在

  • 我有两个表单,我想从form1中获取text box1的值并将其显示为form2中text box2的值。我还希望text box2中的文本以相同的形式(form2)出现在text box3中,但是当我运行程序时,这些值不会显示在text box3上。我希望你明白逻辑,因为它真的很混乱,我不能再简单了。这是我正在尝试做的代码: 我想获取textbox2的值并将其显示在textbox3上(两者都在同