Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript修改XML元素(在XSLT样式表中)_Javascript_Xml_Xslt_Getelementsbytagname - Fatal编程技术网

使用Javascript修改XML元素(在XSLT样式表中)

使用Javascript修改XML元素(在XSLT样式表中),javascript,xml,xslt,getelementsbytagname,Javascript,Xml,Xslt,Getelementsbytagname,使用XML标记,我标记了一首诗(但丁的神曲)中的某些特征。当读者阅读这首诗时,我希望能够为他/她提供按钮,以显示或隐藏(通过预先确定的格式更改)她/他想要的任何特征 因此,我试图在XSLT样式表中编写一个函数,该函数查找任意XML元素的所有实例并修改内容的格式 我已经做了大量的阅读/研究,我想我知道我需要一个循环来查找所有实例并修改它们,因此: <script type="text/javascript"> function displayal() {

使用XML标记,我标记了一首诗(但丁的神曲)中的某些特征。当读者阅读这首诗时,我希望能够为他/她提供按钮,以显示或隐藏(通过预先确定的格式更改)她/他想要的任何特征

因此,我试图在XSLT样式表中编写一个函数,该函数查找任意XML元素的所有实例并修改内容的格式

我已经做了大量的阅读/研究,我想我知道我需要一个循环来查找所有实例并修改它们,因此:

 <script type="text/javascript">
            function displayal() {
                var elems = document.getElementsByTagName('al');
                for(var i = 0; i &lt; elems.length; i++) {
                    elems[i].style.color = 'blue';
                }
            }                                               
 </script>   

函数display(){
var elems=document.getElementsByTagName('al');
对于(变量i=0;i元素长度;i++){
elems[i].style.color='blue';
}
}                                               
仅供参考,“al”是我头韵的标签名称。理论上,上面的代码会将“al”标记中的所有文本变为蓝色

尽管上面的说法可能不正确(当然也需要更正),但我相信我有一个更基本的问题:我根本不知道如何告诉我在XSLT样式表中放入的函数,以便在XML文档中查看!我能找到的唯一能理解的例子是,被修改的元素在同一个html文档中

如果有帮助,下面是我的xml文件的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../para3.xsl"?>

<canto id="3">
    <title> Paradiso 3 </title>
    <ter id="1">
        <l1>Quel sol che pria d'amor mi scaldò 'l petto,</l1>
        <l2>di bella verità m'avea scoverto,</l2>
        <l3><rp>provando e riprovando</rp>, il dolce aspetto;</l3>
    </ter>
    <ter id="2">
        <l1>e io, per <al>confessar corretto e certo</al></l1>
        <l2>me stesso, tanto quanto si convenne</l2>
        <l3>leva' il capo a proferer più erto;</l3>
    </ter>
    <ter id="3">   
        <l1>ma visïone apparve che ritenne</l1>
        <l2>a sé me tanto stretto, per vedersi,</l2>
        <l3>che di mia confession non mi sovvenne.</l3>
    </ter>
    [....]
    <cog> ... </cog>

天堂3
我爱你,我爱你,
在斯考维托的世界里,
普罗万多·里普罗万多,伊尔·多尔塞·阿斯佩托;
e io,根据corretto联合会e certo
我是stesso,tanto quanto si convenne
卡波教授;
切里滕公寓
一个séme tanto Stretco,每个vedersi,
我承认我不是索夫纳。
[....]
... 

以下是xsl文件的要点:

<?xml version="1.0" encoding="UTF-8"?>
    <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="/">
<html>
    <head>
      <title><xsl:value-of select="canto/title"/></title>
    </head>
    <body>
      <script type="text/javascript">
         function displayal()
            var elems = document.getElementsByTagName('al');
            for(var i = 0; i &lt; elems.length; i++) {
            elems[i].style.color = 'blue';
         }                                               
       </script>   
       <div id="container" style="width:800px;background-color:#FFD700">
       <div id="header" style="background-color:#FFA500;height:100px;">
       <h1 style="margin-bottom:10;">Code and Poetry</h1></div>

       <div id="menu" style="width:200px;float:left;">
       <p>Display Options</p>
         <button onclick="displayil()">Show Alliteration</button>
         <button onclick="undisplayil()">Hide Alliteration</button>
       </div>
       <div id="content" style="background-color:#EEEEEE;width:600px;float:left;">
           <h2><i><xsl:value-of select="canto/title"/></i></h2>
           <xsl:apply-templates select="canto/ter"/>
           <xsl:apply-templates select="canto/cog"/>                       
       </div>

函数display()
var elems=document.getElementsByTagName('al');
对于(变量i=0;i元素长度;i++){
elems[i].style.color='blue';
}                                               
法典与诗歌
显示选项

头韵 隐藏头韵

如果你能做到这一点,好极了。谢谢

在这里,您应该仔细了解数据流。XSL转换的输入是XML和XSL样式表。输出是HTML,包括
脚本
元素。HTML浏览器显示HTML并等待它将传递给HTML元素的用户界面事件

您需要安排,当HTML浏览器将某个事件(您的选择)通知某个HTML元素时,元素将具有该事件的处理程序。也许您将通过向HTML按钮
input
元素添加
onclick
属性来放置
onclick
处理程序。相反,您可能只需将
onclick
处理程序附加到
span
元素或
div
元素,该元素包含表示可单击区域的文本或图形。
onclick
处理程序将指定要调用的JavaScript函数,例如您的函数
displayal

函数
displayal
需要作用于HTML元素,而不是元素
canto
中的XML。因此,您不希望使用
getElementsByTagName('al')
,而是希望使用一些函数来获取XSL模板生成的任何HTML元素,例如
canto/ter
。如果这些是HTML无序列表
ul
元素,那么您将使用
getElementsByTagName('ul')

顺便说一句,我建议对函数
displayl

中大括号的使用进行编辑,非常感谢。我(显然)不知道JS是在处理HTML,而不是XML本身!通过使用最初的xsl:template转换插入一个名为“al”的标记,我可以让我的按钮正常工作:
我必须说,这似乎是我“发明”了html——我有一个想法(真的,不知从何而来),你只能放入预先存在的标记,比如或其他什么。但我对所有这些东西的掌握都很薄弱。